Je veux remplacer js arguments.callee
par un autre symbole comme SELF.Récursivité anonyme - un moyen de remplacer javascript 'arguments.callee' par un autre symol tel que 'SELF'?
Est-ce possible?
Une approche macro telle que sweetjs est le seul moyen?
EDIT
Merci beaucoup pour les entrées:
Je comprends arguments.callee
est interdite dans StrictMode.
Pour rendre les choses claires, je vous présente mon code: récursion anonyme
var factorial = function (n)
{
return n ? n * arguments.callee(n - 1) : 1;
};
console.log(factorial(10)); //3628800
et maintenant
var SELF = function (val)
{
return arguments.callee(val);
}
var factorial = function (n)
{
return n ? n * SELF(n - 1) : 1;
};
console.log(factorial(10));
donne une erreur
var SELF = function (val)
^
RangeError: Maximum call stack size exceeded
De plus, je sais qu'il ya manière pour récursivité anonyme pour ne pas utiliser arguments.callee
, mais pour utiliser Y-Combinator.
Mais, arguments.callee
ne peut pas être remplacé par une telle chose? Dans Y-Combinator Scénario, le code doit être
var f = function(f) {
return function(n){
return n ? n * f(n - 1) : 1;
}
}
Le nid devient plus profond pour définir factoriel, etc. que je ne suis pas prêt à ...
EDIT2
après un court laps de temps, un bon article frappe.
Anonymous recursion in 6 lines of Javascript
L'auteur Arne Martin appelle z-Combinator:
var Z = function(func)
{
var f = function()
{
return func.apply(null, [f].concat([].slice.apply(arguments)));
};
return f;
}
var factorial = function (f, n)
{
return n ? n * f(n - 1) : 1;
}
console.log( Z(factorial)(10));
Cette méthode remplit parfaitement mes besoins, et aussi car il ne nécessite pas 'arguments.callee', nous don Ne vous inquiétez pas du mode strict!
Vous pouvez utiliser une expression de fonction nommée et utiliser ce nom à l'intérieur. – elclanrs
Ne pourriez-vous pas simplement utiliser 'var SELF = arguments.callee;' ou est-ce que quelque chose me manque? – Shawn31313
Juste un heads-up: l'utilisation de 'arguments.callee' lancera un' TypeError' en mode strict. – founddrama