的javascript:
for (i = 0; i < n; i++)
{
v = fn(obj);
}
function fn(o)
{
for(i = 0; i < o.length; i++)
{
...
}
}
第一个索引从函数fn(o)中的第二个FOR修改; 这怎么可能?索引的范围是什么?
答案 0 :(得分:2)
您似乎并未将i
声明为本地变量,因此,i
被视为全局变量。您需要编写var
关键字,以便变量成为局部变量。
for (var i = 0; i < n; i++)
{
v = fn(obj);
}
function fn(o)
{
for(var i = 0; i < o.length; i++)
{
}
}
答案 1 :(得分:1)
我没有看到任何var
所以看起来你不是var
任何东西,但我会添加这些并回答问题
是否可以在另一个范围内修改一个
i
循环中的for
?
在 JavaScript 中使用 functions 时,所有原始参数都会传递 ByVal ,所有对象参数都会传递 ByRef 。使用=
时也会发生这种情况。
因此,如果您想要修改i
超出范围,则需要始终通过对象访问它。
function foo() { // scope this away from fn
for (var c = {i: 0}; c.i < n; c.i++) { // i wrapped in object
v = fn(obj, c); // pass wrapping object into `fn`, too. Now see `fn`
// c.i is now the result of change in `fn`
}
}
function fn(o, c) {
for(var i = 0; i < o.length; i++) {
// ...
}
// make change to c.i
c.i = 0;
}
foo();