关于arguments.callee有很多谬误,我试图了解是否存在确实不能被可行的ES5 严格模式替代方案取代的用例。
在MDN arguments.callee文档中,他们指出了 arguments.callee 的使用,没有很好的替代方法,下面的代码示例如下:
function createPerson (sIdentity) {
var oPerson = new Function("alert(arguments.callee.identity);");
oPerson.identity = sIdentity;
return oPerson;
}
var john = createPerson("John Smith");
john();
他们包含一个错误,以表明在某些情况下,argument.callee不能被符合ES5 严格模式的代码替换。
但在理解上,他们用作示例的代码可以替换为以下严格模式替代方案:
"use strict";
function createPerson(sIdentity) {
var oPerson = function () {
alert(oPerson.identity);
};
oPerson.identity = sIdentity;
return oPerson;
}
var john = createPerson("John Smith");
john();
有了这一点,确实存在一些无法替换 arguments.callee 的算法?
赏金
为了赢得赏金,我希望答案包含arguments.callee
使用其他解决方案将更加晦涩或不可能的地方。
在 MDN 示例中,我编写的替代版本不会改变那段代码的用法。