Agregar / modificar propiedades a un objeto y devolverlo en la misma línea es un posible caso de uso:
console.log(
((x) => (o = {biggerCond: r => r >= x},
o.r5 = Array.from(window.crypto.getRandomValues(new Uint16Array(5))),
o.isAnyBigger = o.r5.some(o.biggerCond),
o.bigger = o.isAnyBigger ? o.r5.filter(o.biggerCond) : [x], o )
)(5e4)
);
La función anónima anterior devuelve un objeto con valores aleatorios mayores que el valor de entrada o, si no hay ninguno, con el valor de entrada en sí en una matriz contenida en la bigger
propiedad.
Sigue siendo azúcar sintáctico (como funciones de flecha ), pero acorta el número de líneas ... Me pregunto si algunos minificadores JS detectan y ajustan el código de manera similar automáticamente. Ejecútelo en su consola:
((x)=>(o={biggerCond:r=>r>=x},o.r5=Array.from(window.crypto.getRandomValues(new Uint16Array(5))),o.isAnyBigger=o.r5.some(o.biggerCond),o.bigger=o.isAnyBigger?o.r5.filter(o.biggerCond):[x],o))(5e4)
alert
toma solo un argumento. Cualquier cosa después de eso se descarta.arguments
objeto en su lugar, que puede tener cualquier longitud). Incluso con JS compilado moderno, no habría forma de saber con anticipación cuántos argumentos tomaría una función. Considere esto:function test() { args=[]; for (var i = 0; i < arguments.length; i++) { args.push(arguments[i] + 1); } ;
el intérprete tendría que saber cómo se estaba utilizando la función para saber cuántos argumentos se necesitarían. En cambio, evalúa todo.