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”变量。然而,事实是它确实有影响。
有人可以帮忙解释一下吗?感谢。
答案 0 :(得分:1)
使用var
声明,范围为function
级别。这些声明被解释为它们出现在封闭函数的最开头。
在现代JavaScript环境中,let
声明允许您创建作用于本地语句块的变量。 (对于不可修改的符号也是const
。)
在您的情况下,嵌套函数中的内部i
仅引用外部声明的i
。从函数内部,您可以随时看到&#34;出去,但你不能看到&#34; in。这就是范围如何运作。