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:尝试“获取”未声明、未初始化的变量将导致引用错误:“您是否尝试过alert() myvar.length 的值? myvar 也是全局变量吗? Pascal 是对的,您可能希望使用 i 因为它的值将通过您的 myvar 对象计数,除非任何函数更改 myvar 的长度?
【讨论】:
【参考方案4】:我没有什么明显的错误,但我要从什么开始:
几个调整,只是为了确定:帕斯卡说了什么:-Dfor (**var** i = 0; i < count; i++) **** whatever(...); ****
我猜我打字很慢!
【讨论】:
以上是关于for() 的奇怪 javascript 行为的主要内容,如果未能解决你的问题,请参考以下文章