可以将javascript变量的范围扩展到函数,并且该函数的递归调用可以自己调用吗?

时间:2011-09-26 20:31:24

标签: javascript

我遇到的情况是我有一个调用函数的循环。一旦调用,该函数将对其自身进行递归调用。

有没有办法可以将变量范围扩展到函数和第一次调用生成的递归调用链?

这样的事情:

for(var i=0;i<100;i++)
{
  myFunction();
}

function myFunction()
{
   var someNumber = 200;
   someNumber -= 10;
   if( someNumber > 0)
   {
      myFunction();
   }
}

在第一次调用someNumber的第二次迭代中,它将是190而不是200.这可以实现吗?

如果这里有什么令人困惑的地方,请告诉我。

5 个答案:

答案 0 :(得分:2)

while(var i=0;i<100;i++)
{
  myFunction(200);
}

function myFunction(someNumber)
{
   someNumber -= 10;
   if( someNumber > 0)
   {
      myFunction(someNumber);
   }
}

答案 1 :(得分:2)

是的,使用内部函数进行递归:

for (var i = 0; i < 100; i++)
{
    myFunction();
}

function myFunction()
{
    var someNumber = 200;
    (function innerFunction()
    {
        someNumber -= 10;
        if( someNumber > 0)
        {
            innerFunction();
        }
    })();
};

注意,您有语法错误。您的while必须为for

编辑:也许您的真实代码不同并且需要递归函数,但只需使用循环就可以简化您的示例:

function myFunction()
{
    for (var someNumber = 200; someNumber > 0; someNumber -= 10)
    {
    }
};

答案 2 :(得分:1)

是和否 - 您应该能够通过将变量的值作为myFunction的参数传递来完成任务。第一次调用需要设置起始值,然后将其传递给将来的调用进行修改。

while(var i=0;i<100;i++)
{
  myFunction();
}


function myFunction(seed) {
    if (seed == undefined)
    {
        seed = 200;
    }

    alert(seed);

    var newSeed = seed - 50;
    if (seed > 0)
    {
        myFunction(newSeed);
    }
};

答案 3 :(得分:0)

我认为如果你想做一些实际的变量范围,就可以使用对象。

function myObject(_someNumber) {
    var someNumber = _someNumber;

    this.myFunction = function() {
        this.someNumber -= 10;
        if(this.someNumber > 0)
        {
           this.myFunction(this.someNumber);
        }
    }
}

for(var i=0;i<100;i++)
{
  new myObject().myFunction(someNumber);
}

答案 4 :(得分:0)

你想要一个闭包。好吧,你可能不想要它,但它会做你要求的。

(function() {
    var someNumber=200;
    myFunction=function() {
        someNumber-=10;
        if (someNumber > 0) {
            myFunction();
        }
    }
})();

但正确传递参数可能是一个更好的主意。