Javascript - 将读者内部的索引转换为for函数内部,是否可能?

时间:2014-04-04 18:00:59

标签: javascript scope

的javascript:

for (i = 0; i < n; i++)
{ 
    v = fn(obj); 
}

function fn(o)
{
    for(i = 0; i < o.length; i++)
    { 
        ... 
    }
}

第一个索引从函数fn(o)中的第二个FOR修改; 这怎么可能?索引的范围是什么?

2 个答案:

答案 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();