Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript for循环中的函数调用是否终止循环?_Javascript - Fatal编程技术网

Javascript for循环中的函数调用是否终止循环?

Javascript for循环中的函数调用是否终止循环?,javascript,Javascript,我在使用JavaScript时遇到了一个有趣的问题。我有一种感觉,这可能与闭包有关,我承认,我对闭包不是很满意 问题 似乎从内部调用函数会导致循环过早终止。我尝试在没有函数调用的情况下运行同一个循环,并且console.log()准确地输出计数器,表明函数调用正在破坏循环 有人能提出一个可能的解决办法吗?我在这里粘贴了代码: AbstractModel.prototype.deactivateContext = function(context){ for(i=0;i<this.

我在使用JavaScript时遇到了一个有趣的问题。我有一种感觉,这可能与闭包有关,我承认,我对闭包不是很满意

问题 似乎从内部调用函数会导致循环过早终止。我尝试在没有函数调用的情况下运行同一个循环,并且console.log()准确地输出计数器,表明函数调用正在破坏循环

有人能提出一个可能的解决办法吗?我在这里粘贴了代码:

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;i
var
不是可选的

您可能在另一个方法中有一个全局
i
。请将变量声明为正确的范围

for (var i=0; i<this.asset.length; i++) {
     ^^^

for(var i=0;i
var
不是可选的

您可能在另一个方法中有一个全局
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。