javascript中的变量范围

时间:2017-02-20 04:40:40

标签: javascript function

    calValue: function (data) {
            var self = this;
            var values = data.values;
            for (var i = 0; i < data.length; i++) {
                  if(data.condition == 0){
                    (function (values) {
                            for (i = 0; i < values.length; i++) {
                            }
                    })(values)
                    }
                    else{
                            //do sth else
                    }
            }
    }

我的理解是每个功能都有自己的上下文,并且在其中声明的变量只会在内部有效。像上面的代码片段一样,我希望内部for循环中的“i”变量不会影响外部的“i”变量。然而,事实是它确实有影响。

有人可以帮忙解释一下吗?感谢。

1 个答案:

答案 0 :(得分:1)

使用var声明,范围为function级别。这些声明被解释为它们出现在封闭函数的最开头。

在现代JavaScript环境中,let声明允许您创建作用于本地语句块的变量。 (对于不可修改的符号也是const。)

在您的情况下,嵌套函数中的内部i仅引用外部声明的i。从函数内部,您可以随时看到&#34;出去,但你不能看到&#34; in。这就是范围如何运作。