Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.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变量范围”;为了……在……中”;循环?_Javascript_Scope - Fatal编程技术网

“中的Javascript变量范围”;为了……在……中”;循环?

“中的Javascript变量范围”;为了……在……中”;循环?,javascript,scope,Javascript,Scope,假设我有一个代码片段: dict = {"key":"elem"} for (var elem in dict){ someFunction(function(){ anotherFunction(dict[elem]); }) } elem是否仍然是在第三级,即在另一个函数(dict[elem])引用时在for…in…语句中创建的临时变量 当它在我的代码中被调用时,我得到一个错误,说它返回undefined 编辑:我可以在某个地方用这个关键字来解决这个问题吗?

假设我有一个代码片段:

dict = {"key":"elem"}
for (var elem in dict){
    someFunction(function(){
        anotherFunction(dict[elem]);
    })
}
elem
是否仍然是在第三级,即在
另一个函数(dict[elem])
引用时在
for…in…
语句中创建的临时变量

当它在我的代码中被调用时,我得到一个错误,说它返回undefined


编辑:我可以在某个地方用
这个
关键字来解决这个问题吗?

elem
定义好了您的问题是:

dict[elem]

返回
undefind

如果在任何语句中创建变量,该变量的作用域仍然是最近的父函数,这就是JavaScript的工作方式。作用域是函数。你应该能够在那里使用
elem
,所以你的问题一定在其他地方,正如gdoron所说

编辑:


似乎您正在调用一个将另一个函数作为参数的函数。这真的是您想要做的吗?

要使用
dict
变量作为另一个函数的作用域,您需要引用
dict
作为该函数的作用域。例如:

for (var elem in dict) {
  someFunction(function(dict, elem) {
    return anotherFunction.call(dict, elem);
  }
}
另一个函数
结构中,使用
this
关键字将引用
dict
对象


您正在匿名函数上创建一个闭包,因此它取决于您在设置和使用变量之间对变量所做的操作

var dict = {
    "a": "aaaaaaaaa",
    "b": "bbbbbbbbb",
    "c": "ccccccccc"
};

for (var elem in dict) {
    someFunction(function() {
        anotherFunction(dict[elem]);
    })
}

function anotherFunction(a) {
    console.log(a);
}
异步:循环在实际执行代码之前运行,因此
elem
最终成为集合中的最后一个键。最后一个键会被多次使用

function someFunction(f) {   
    setTimeout(f, 500);
}
同步:每个函数按顺序运行,因此每个值都会打印出来

function someFunction(f) {
    f();
}

循环没有范围的概念。什么是
dict
变量?对象或数组?只有一个变量名为
elem
——这意味着它在使用站点上计算的值意味着什么?(提示:只有新的函数作用域才能引入新的变量。)寻找“javascript循环最后一个值闭包”或类似的内容。你的编辑毫无意义,怎么能用
this
somewhre来修复呢?例如,(这可能不是问题,bit是问题)好的,对不起,dict是一个对象,比如说,定义为
dict={“key”:“val”}
第一部分是正确的。我怀疑问题与不理解这一点有关(或者只是没有正确的数据,或者没有使用词法变量或…)