for循环和迭代器变量的范围

时间:2013-12-30 18:58:44

标签: javascript for-loop scope

我在一个长脚本中添加了一些新功能,其中许多变量被缩小(只有一个字母)。

当添加for循环时,如果用于迭代的传统i变量可用,我必须检查很多。即在此脚本范围内未采取/定义。

我的第一个想法就是这样做:

(function () {
    for (var i = 0; i < 20; ++i) {
        console.log(i);    // logs 1 to 19
    }
})()
console.log('After is: ' + typeof i); // After is: undefined 

有更好的方法吗?在这种情况下,人们可以考虑其他什么方式?

1 个答案:

答案 0 :(得分:4)

修复脚本不使用单字母变量。但是,禁止使用函数:

function repeat(fun, times) {
    // Since JavaScript is function scoped
    // `i` will not leak out of the `repeat`
    // function.  We will not be able to access
    // `i` from a higher scope in this function,
    // but, we can assume that is unnecessary.
    for (var i = 0; i <= times; i++) {
        fun(i);
    }
}

var i = "some value";
repeat(function(index) {
    console.log("Index is:", index);
    console.log("`i` remains:", i);
}, 10);
console.log("After call, `i` is:", i);