“中的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”}
第一部分是正确的。我怀疑问题与不理解这一点有关(或者只是没有正确的数据,或者没有使用词法变量或…)