在递归调用中避免使用null ref

时间:2014-09-14 12:37:39

标签: javascript

我已经递归调用了,我想要安全(如果我的func将为null,这将导致错误),目前我使用函数内部函数的调用,这可能有一些引用问题在null的情况下,有一种方法可以在JS中使这个调用安全吗?

e.g。

myFunc("hello",1);

function myFunc(){
  myFunc();
}

我试图在网上找到一些方法来克服这个问题,但没有找到......

2 个答案:

答案 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 demystifiedDouble-take)。

答案 1 :(得分:-2)

在这种情况下,我会使用arguments.callee,如下面的

function myFunc(){
  arguments.callee();
}   

这为您提供了该功能的参考,您不需要使用该功能名称。

如果这可以解决您的问题,请告诉我。

更新 - 正如Pr0gr4mm3r在下面的评论中所述,这在ECMAScript 5严格模式中不可用 祝你好运!