我已经递归调用了,我想要安全(如果我的func将为null,这将导致错误),目前我使用函数内部函数的调用,这可能有一些引用问题在null的情况下,有一种方法可以在JS中使这个调用安全吗?
e.g。
myFunc("hello",1);
function myFunc(){
myFunc();
}
我试图在网上找到一些方法来克服这个问题,但没有找到......
答案 0 :(得分:3)
您可以确保使用闭包引用myFunc
:
var myFunc = (function() {
function myFunc() {
myFunc();
}
return myFunc;
})();
// demo
var tmp = myFunc;
myFunc = null;
tmp(); // infinite recursion
如果您不需要支持IE8及更低版本,那么命名函数表达式会更好并完成工作:
var myFunc = function myFunc() {
myFunc();
};
不幸的是,IE8有一个阻止它工作的错误(请参阅Juriy“kangax”Zaytsev和blogpost Named function expressions demystified的Double-take)。
答案 1 :(得分:-2)
在这种情况下,我会使用arguments.callee,如下面的
function myFunc(){
arguments.callee();
}
这为您提供了该功能的参考,您不需要使用该功能名称。
如果这可以解决您的问题,请告诉我。
更新 - 正如Pr0gr4mm3r在下面的评论中所述,这在ECMAScript 5严格模式中不可用 祝你好运!