Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的变量作用域 calValue:函数(数据){ var self=这个; var值=data.values; 对于(变量i=0;i_Javascript_Function - Fatal编程技术网

javascript中的变量作用域 calValue:函数(数据){ var self=这个; var值=data.values; 对于(变量i=0;i

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

我的理解是,每个函数都有自己的上下文,其中声明的变量只在内部有效。像上面的代码片段一样,我希望内部for循环中的“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
                    }
            }
    }