【问题标题】:Weird javascript behaviour with for()for() 的奇怪 javascript 行为
【发布时间】:2011-07-28 22:13:14
【问题描述】:

我有这样的功能:

var dostuff = function(thing){
  var count = myvar.length; // <- I know for sure it's larger than 1
  for (i = 0; i < count; i++)
    whatever(myvar[myvar.length - 1]);
},
...
dostuff(thing);
...

问题是for循环只执行一次whatever(),即使count变量是4、10、20、100...

我在这里做错了什么?

【问题讨论】:

  • 它应该按照你的方式工作,我们需要查看更多代码才能给出正确的答案
  • 嗯,这似乎没问题,我们可以看看剩下的代码吗?
  • 但是任何函数都会影响 for 计数器吗?
  • @Alexandra: 不,count 应该 保存 myvar.length 的值,所以即使它在循环中发生变化也不应该改变任何东西。可能是你的代码在第一次之后出现错误并且代码失败了,尝试打开控制台看看是否有任何错误
  • 好的,我找到了问题。这是因为我在任何函数中使用了i 变量。如果我用不同的名称更改i 它可以工作...但这仍然很奇怪,因为i 是在每个函数中定义的...

标签: javascript jquery arrays for-loop


【解决方案1】:

不确定您要做什么,但是,如果您想为myvar 中的每个项目调用whatever 函数,您应该使用这个:

  for (i = 0; i < count; i++)
    whatever(myvar[ i ], thing);

注意i 而不是myvar.length - 1

【讨论】:

  • 如果你朝着那个方向前进,你可能不只是使用for(i in myvar... 语法吗?
  • @Shad:如果您只想要编号的属性而不是所有属性,则不需要
【解决方案2】:

whatever() 是否也有一个带有“i”变量的循环?它可能会在全球范围内设置 i 。您应该将 i 声明为 dostuff 函数的本地,并使用大括号保持良好的卫生:

for(var i= 0; i < count; i++) {  
    whatever(...);
}

【讨论】:

  • 就是这样,但我没有在这些函数之外声明i...我不明白为什么每个函数都在改变其他函数的i
  • 每当你要求 javascript 获取/设置一个变量,而 JS 在本地找不到它时,它假定你的意思是它是一个全局变量。
  • 显然,在声明本地变量时使用“var”关键字很重要。
  • @Jeff Meatball Yang:尝试“获取”未声明、未初始化的变量将导致引用错误:“ is undefined”。未声明的变量在赋值时才成为全局对象的属性。
  • 就像大卫说的,jslint 真的很严格。我更喜欢在使用它们时声明它们,TYVM。 :)
【解决方案3】:

您是否尝试过alert() myvar.length 的值? myvar 也是全局变量吗? Pascal 是对的,您可能希望使用 i 因为它的值将通过您的 myvar 对象计数,除非任何函数更改 myvar 的长度?

【讨论】:

    【解决方案4】:

    我没有什么明显的错误,但我要从什么开始:

    • 几个调整,只是为了确定:
    for (**var** i = 0; i < count; i++) **{**
      whatever(...);
    **}**
    
    • 帕斯卡说了什么:-D

    我猜我打字很慢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 2013-01-20
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多