Javascript for循环中的函数调用是否终止循环?
我在使用JavaScript时遇到了一个有趣的问题。我有一种感觉,这可能与闭包有关,我承认,我对闭包不是很满意 问题 似乎从内部调用函数会导致循环过早终止。我尝试在没有函数调用的情况下运行同一个循环,并且console.log()准确地输出计数器,表明函数调用正在破坏循环 有人能提出一个可能的解决办法吗?我在这里粘贴了代码:Javascript for循环中的函数调用是否终止循环?,javascript,Javascript,我在使用JavaScript时遇到了一个有趣的问题。我有一种感觉,这可能与闭包有关,我承认,我对闭包不是很满意 问题 似乎从内部调用函数会导致循环过早终止。我尝试在没有函数调用的情况下运行同一个循环,并且console.log()准确地输出计数器,表明函数调用正在破坏循环 有人能提出一个可能的解决办法吗?我在这里粘贴了代码: AbstractModel.prototype.deactivateContext = function(context){ for(i=0;i<this.
AbstractModel.prototype.deactivateContext = function(context){
for(i=0;i<this.asset.length;i++){
if(this.asset[i].context == context){
this.asset[i].deactivate();
console.log(i);
this.notify(this.asset[i],"REFRESHASSETS");
}
}
}
AbstractModel.prototype.deactivateContext=函数(上下文){
对于(i=0;i您是否尝试过在try catch中包装对notify
函数的调用。如果您是说当您删除调用时,计数器打印的输出与预期一致,那么唯一的解释就是您的函数正在抛出异常。请尝试以下操作:
for(i=0;i<this.asset.length;i++){
if(this.asset[i].context == context){
this.asset[i].deactivate();
console.log(i);
try {
this.notify(this.asset[i],"REFRESHASSETS");
} catch(e) {
alert(e);
console.log(e);
}
}
}
for(i=0;i您是否尝试过将调用包装到try catch中的notify
函数。如果您是说当您删除调用时,计数器打印的输出与预期一致,那么唯一的解释就是您的函数引发了异常。请尝试以下操作:
for(i=0;i<this.asset.length;i++){
if(this.asset[i].context == context){
this.asset[i].deactivate();
console.log(i);
try {
this.notify(this.asset[i],"REFRESHASSETS");
} catch(e) {
alert(e);
console.log(e);
}
}
}
(i=0;ivar
的不是可选的
您可能在另一个方法中有一个全局i
。请将变量声明为正确的范围
for (var i=0; i<this.asset.length; i++) {
^^^
for(var i=0;ivar
不是可选的
您可能在另一个方法中有一个全局i
。请将变量声明为正确的范围
for (var i=0; i<this.asset.length; i++) {
^^^
对于(var i=0;i请在以下函数中声明i,如
AbstractModel.prototype.deactivateContext = function(context){
for(var i=0;i<this.asset.length;i++){
if(this.asset[i].context == context){
this.asset[i].deactivate();
console.log(i);
this.notify(this.asset[i],"REFRESHASSETS");
}
}
}
AbstractModel.prototype.deactivateContext=函数(上下文){
对于(var i=0;i请在以下函数中声明i,如
AbstractModel.prototype.deactivateContext = function(context){
for(var i=0;i<this.asset.length;i++){
if(this.asset[i].context == context){
this.asset[i].deactivate();
console.log(i);
this.notify(this.asset[i],"REFRESHASSETS");
}
}
}
AbstractModel.prototype.deactivateContext=函数(上下文){
对于(var i=0;i您在哪里调用了此方法?(您调用了此方法吗?)这只是一个方法定义;它实际上不会运行主体。哪个特定的函数调用似乎是问题所在?该循环中有3个。AbstractModel将有一个名为deactivateContext的方法。看起来您有一个名为deactivate的Assets对象,其方法为deactivate。如果您向我们展示调用和更多代码,我们将能够对bette进行注释rOh,我找到了。我没有声明。我来自全局上下文。你忘了用var
声明“I”。如果另一个函数也使用“I”来控制循环,那么你就会有问题。你在哪里调用了这个方法?(你调用了这个方法吗?)这只是一个方法定义;它实际上不会运行主体。哪个特定的函数调用似乎是问题所在?该循环中有3个。AbstractModel将有一个名为deactivateContext的方法。看起来您有一个名为deactivate的Assets对象,其方法为deactivate。如果您向我们展示调用和更多代码,我们将能够对bette进行注释rOh,我找到了。我没有声明。我来自全局上下文。你忘了用var
声明“I”。如果另一个函数也使用“I”来控制循环,那么你就会有问题。是的,问题可能是改变“I”或this.asset.length的副作用。我在另一个函数中使用“I”(通知)也没有明确声明它,这将解释为什么循环提前结束。干杯!是的,问题可能是改变“i”或this.asset.length的副作用我在另一个函数中使用“i”(通知)也没有明确声明它,这将解释为什么循环会提前结束。干杯!+1,这是一个非常聪明的调试技巧,但问题是通过明确声明计数器解决的。我在另一个functino(notify)中使用“I”也没有显式声明它,这将解释循环提前结束的原因。谢谢!哦,很酷,很抱歉没有注意到您没有显式声明var。+1,这是一个非常聪明的调试技巧,但问题是通过显式声明计数器解决的。我在另一个functino(notify)中使用“I”也没有显式声明它,这将解释为什么循环提前结束。谢谢!哦,酷,对不起,我注意到你没有显式声明var。