javascript中的变量作用域 calValue:函数(数据){ var self=这个; var值=data.values; 对于(变量i=0;i
我的理解是,每个函数都有自己的上下文,其中声明的变量只在内部有效。像上面的代码片段一样,我希望内部for循环中的“i”变量不会影响外部的“i”变量。然而,事实是,它确实会影响javascript中的变量作用域 calValue:函数(数据){ var self=这个; var值=data.values; 对于(变量i=0;i,javascript,function,Javascript,Function,我的理解是,每个函数都有自己的上下文,其中声明的变量只在内部有效。像上面的代码片段一样,我希望内部for循环中的“i”变量不会影响外部的“i”变量。然而,事实是,它确实会影响 有人能解释一下吗?谢谢。通过var声明,作用域位于功能级别。这样的声明被解释为好像它们出现在封闭函数的最开始 在现代JavaScript环境中,let声明允许您创建作用域为本地语句块的变量。(对于不可修改的符号,也可使用const) 在您的例子中,嵌套函数中的内部i只是指外部声明的i。从函数内部,您总是可以向外“看”,但不
有人能解释一下吗?谢谢。通过
var
声明,作用域位于功能
级别。这样的声明被解释为好像它们出现在封闭函数的最开始
在现代JavaScript环境中,let
声明允许您创建作用域为本地语句块的变量。(对于不可修改的符号,也可使用const
)
在您的例子中,嵌套函数中的内部
i
只是指外部声明的i
。从函数内部,您总是可以向外“看”,但不能向内“看”。这就是作用域的工作原理。这是因为您没有在第二个内部函数中重新声明i
,所以它使用外部函数中的i
,而不是它自己的内部副本。谢谢daniel。这是有道理的。
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
}
}
}