在递归调用中避免空引用

Avoid null ref in recursive call

本文关键字:引用 递归 调用      更新时间:2023-09-26

我有递归调用,我希望是安全的(以防我的func为null会导致错误),目前我使用对函数本身内部函数的调用,如果为null,可能会有一些ref问题,有什么方法可以在JS中使此调用安全?

例如

myFunc("hello",1);
function myFunc(){
  myFunc();
}

我试着在网上找到一些克服这个问题的方法,但没有找到。。。

您可以确保使用闭包引用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和博客文章Double-take解密的命名函数表达式)。

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

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

这为您提供了函数的引用,您不需要使用函数名称。

如果这能解决你的问题,请告诉我。

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