for() 的奇怪 javascript 行为

Posted

技术标签:

【中文标题】for() 的奇怪 javascript 行为【英文标题】:Weird javascript behaviour with for() 【发布时间】: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 是在每个函数中定义的... 【参考方案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

我猜我打字很慢!

【讨论】:

以上是关于for() 的奇怪 javascript 行为的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 循环:for...in 与 for

Javascript赋值运算符奇怪的行为

JavaScript递归奇怪的行为?

检查javascript布尔奇怪的行为

Photoshop Javascript 的奇怪行为

Lua for循环减少我?奇怪的行为[重复]