varargs passed length array argumentos argument javascript cross-browser

passed - javascript params array



Arguments.callee está en desuso, ¿qué debería usarse en su lugar? (3)

Por hacer cosas como

setTimeout(function () { ... setTimeout(arguments.callee, 100); }, 100);

Necesito algo como arguments.callee . Encontré información en javascript.info que arguments.callee está en desuso:

Esta propiedad está obsoleta por ECMA-262 a favor de expresiones de función nombradas y para un mejor rendimiento.

Pero, ¿qué debería usarse en su lugar? ¿Algo como esto?

setTimeout(function myhandler() { ... setTimeout(myhandler, 100); }, 100); // has a big advantage that myhandler cannot be seen here!!! // so it doesn''t spoil namespace

Por cierto, ¿es compatible con los navegadores compatibles con arguments.callee ?



Sí, eso es lo que, teóricamente, debería usarse. Tienes razón. Sin embargo, no funciona en algunas versiones de Internet Explorer, como siempre. Así que ten cuidado. Es posible que necesite recurrir a arguments.callee o, mejor dicho, a un simple:

function callback() { // ... setTimeout(callback, 100); } setTimeout(callback, 100);

Que funciona en IE.


la respuesta de minitech es bastante buena, pero falta un escenario más. Su función de declaración llamada devolución de llamada, que significa dos cosas, primero la función es objeto en la memoria, y el segundo, el nombre de la función es solo para hacer referencia al objeto. Si usted, por alguna razón, rompe la referencia entre estos dos, el código propuesto tampoco funcionará.

Prueba:

function callback() { // ... setTimeout(callback, 100); } setTimeout(callback, 100); var callback2 = callback; //another reference to the same object callback = null; //break the first reference callback2(); //callback in setTimeout now is null.

De la página del desarrollador Mozilla en la descripción es:

Advertencia: La quinta edición de ECMAScript (ES5) prohíbe el uso de arguments.callee () en modo estricto. Evite usar arguments.callee () dando un nombre a las expresiones de función o use una declaración de función donde una función debe llamarse a sí misma.

Obviamente, este es el primer ejemplo de solución " al darle un nombre a las expresiones de función ", pero veamos cómo podemos tratar " o usar una declaración de función donde una función debe llamarse a sí misma " y lo que traerá:

function callback(){ //... setTimeout(innercall(), 100); function innercall(){ //innercall is safe to use in callback context innercall.caller(); //this will call callback(); } }

Entonces estamos seguros de hacer lo que queramos con la referencia de devolución de llamada:

var callback2 = callback; callback = null; callback2(); //will work perfectly.