可能将javascript变量作用于函数并且该函数的递归调用自身?

问题描述:

我处于一种情况,我有一个正在调用函数的循环。一旦调用该函数,该函数将对其自身进行递归调用。可能将javascript变量作用于函数并且该函数的递归调用自身?

有没有一种方法可以将一个变量的范围限制在从第一次调用生成的函数和递归调用链中?

事情是这样的:

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

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

,其中在第一次调用someNumber的第二次迭代将是190,而不是200。这是可能做到?

如果在这里有任何混淆,请让我知道。

+0

这不是如何'while'循环的作品。是否有一些原因,你不只是声明'myFunction'之外的变量,并在循环内重新初始化?只要你的代码是同步的,它就可以正常工作。 [jsFiddle示例](http://jsfiddle.net/cjV4V/) – user113716

+0

我输错了,它应该是'for'。 –

是,使用一个内部函数做递归:

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) 
    { 
    } 
}; 
+0

注意,** ReactJS **用户的语法是'var funcName = function(){...}。bind(this);' – fungusanthrax

是和否 - 您应该可以通过将变量的值作为参数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); 
    } 
}; 

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

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

我认为使用对象将是去,如果你想要做的事,你实际上是作用域变量的方法。

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

你想关闭。那么,你可能不需要它,但它会做你在问什么。

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

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