Javascript 对于循环和迭代器变量';s范围

Javascript 对于循环和迭代器变量';s范围,javascript,for-loop,scope,Javascript,For Loop,Scope,我在一个长脚本中添加了一些新特性,其中许多变量被缩小(只有一个字母) 当添加for循环时,我必须检查用于迭代的传统I变量是否可用。在此脚本范围内之前未采用/定义ie 我的第一个想法是这样界定它: (function () { for (var i = 0; i < 20; ++i) { console.log(i); // logs 1 to 19 } })() console.log('After is: ' + typeof i); // Afte

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

当添加for循环时,我必须检查用于迭代的传统
I
变量是否可用。在此脚本范围内之前未采用/定义ie

我的第一个想法是这样界定它:

(function () {
    for (var i = 0; i < 20; ++i) {
        console.log(i);    // logs 1 to 19
    }
})()
console.log('After is: ' + typeof i); // After is: undefined 
(函数(){
对于(变量i=0;i<20;++i){
console.log(i);//日志1到19
}
})()
console.log('After is:'+typeof i);//后面是:未定义

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

修复脚本,使其不使用单字母变量。但要强调这一点,请改用函数:

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);
功能重复(乐趣,次数){
//因为JavaScript是函数范围的
//“我”不会从“重复”中漏出`
//功能。我们将无法访问
//“我”在这个函数的更高范围内,
//但是,我们可以假设这是不必要的。

对于(var i=0;i修复脚本,使其不使用一个字母的变量。但是,请使用函数:

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);
功能重复(乐趣,次数){
//因为JavaScript是函数范围的
//“我”不会从“重复”中漏出`
//功能。我们将无法访问
//“我”在这个函数的更高范围内,
//但是,我们可以假设这是不必要的。

对于(VAR i=0;为什么你要编辑缩小的版本?你应该编辑非缩小的版本。你的真实代码应该使用有意义的变量名。你的函数需要多长时间才能在中间引入iFIE,只是为了适应<代码> i/Cuff>变量?为什么不把它分成单独的命名函数?@ RocketHazmat,我同意你的看法。剧本就是这样,我也是(不幸的是)必须按照它的方式工作。但是我确实在需要的时候添加了适当的/清晰的变量。你为什么要编辑缩小的版本?你应该编辑非缩小的版本。你的真正的代码应该使用有意义的变量名。你的函数需要多长时间才能在中间引入IIFE?定义一个
i
变量的范围?为什么不把它分解成单独的命名函数呢?@RocketHazmat,我同意你的看法。脚本就是这样,我也是这样做的(不幸的是)必须按原样使用它。但我确实会向我正在添加的部分添加适当/清晰的变量,并在需要时进行注释。+1这是解决此问题的最佳方法,而不是使用IIFE:-)+1-有趣的解决方案将函数作为函数参数传递!为什么这比IIFE好?@Rikard:它是可重用的!您不需要编写
(function(){}())
everywhere.@Rikard-这样我们可以在以后修复脚本后轻松找到并替换所有这些调用:-)太好了-很高兴我能提供帮助!+1这是解决此问题的最好方法,而不是使用iLife:-)+1-将函数作为函数参数传递的有趣解决方案!为什么这比IIFE更好?@Rikard:它是可重用的!您不需要到处编写
(function(){}())
。@Rikard-这样我们在修复脚本后就可以轻松找到并替换所有这些调用:-)太好了-很高兴我能帮上忙!