可以将javascript变量的作用域限定为一个函数,并且该函数可以递归地调用它自己

Possible to scope a javascript variable to a function and that function's recursive calls to itself?

本文关键字:函数 一个 它自己 调用 递归 变量 javascript 作用域      更新时间:2023-09-26

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

是否有一种方法可以将变量作用于函数和从第一次调用生成的递归调用链?

像这样:

for(var i=0;i<100;i++)
{
  myFunction();
}
function myFunction()
{
   var someNumber = 200;
   someNumber -= 10;
   if( someNumber > 0)
   {
      myFunction();
   }
}

在第一次调用someNumber的第二次迭代时将是190而不是200。这有可能实现吗?

如果有什么不明白的地方,请告诉我

可以,使用内部函数进行递归:

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)
    {
    }
};
while(var i=0;i<100;i++)
{
  myFunction(200);
}
function myFunction(someNumber)
{
   someNumber -= 10;
   if( someNumber > 0)
   {
      myFunction(someNumber);
   }
}

是和否—您应该能够通过将变量的值作为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);
    }
};

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

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

我认为使用对象将是一种方式,如果你想做的事情,你实际上是范围变量

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);
}