tipos - pasar variables de una funcion a otra en javascript
¿Puede una función de JavaScript volver a sí misma? (6)
Hay 2-3 maneras. Uno es, como dices, es utilizar arguments.callee
. Podría ser la única forma si está tratando con una función anónima que no está almacenada asignada a una variable en algún lugar (que usted sepa):
(function() {
return arguments.callee;
})()()()().... ;
El segundo es usar el nombre de la función.
function namedFunc() {
return namedFunc;
}
namedFunc()()()().... ;
Y la última es usar una función anónima asignada a una variable, pero debes conocer la variable, así que en ese caso no veo ninguna razón, por qué no puedes simplemente darle un nombre a la función y usar el método anterior.
var storedFunc = function() {
return storedFunc;
};
storedFunc()()()().... ;
Todos son funcionalmente idénticos, pero el callee
es el más simple.
Edit: Y estoy de acuerdo con SLaks; Yo tampoco lo puedo recomendar
¿Puedo escribir una función que se devuelva?
Estaba leyendo alguna descripción sobre cierres ( vea el Ejemplo 6 ) donde una función estaba devolviendo una función, por lo que podría llamar a func()();
como JavaScript válido.
Así que me preguntaba si una función podría volver a sí misma de tal manera que usted pudiera encadenarse a sí misma indefinidamente así:
func(arg)(other_arg)()(blah);
¿Usando arguments
objeto, llamante o llamante?
Hay una manera simple de lograr esto haciendo lo siguiente:
let intArr = [];
function mul(x){
if(!x){
return intArr.reduce((prev, curr) => prev * curr)
}
intArr.push(x);
return mul;
}
console.log(mul(2)(4)(2)()); => outputs 16
Incluso clasificador que todo lo anterior es:
f=()=>f
Puedes hacer lo que quieras de la siguiente manera:
// Do definition and execution at the same time.
var someFunction = (function someFunction() {
// do stuff
return someFunction
})();
console.log(someFunction)
developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… no es compatible con el modo estricto de JavaScript.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode
Sí.
Simplemente return arguments.callee;
Sin embargo, es probable que esto resulte en un código muy confuso; No lo recomiendo.
También es posible devolver el argumento de la función auto invocable como
console.log( (function(a) { return a; })(1) ); // returns 1