假设我有一个像这样的JS代码
var num = 0;
function foo(input){
num = input;
}
function bar(){
setTimeout(foo(2), 100);//1
setTimeout(function(){foo(5);},100);//2
alert("num =" + num);//3
}
使用1和3 ..... 2和3的结果...我有结果但不能理解行为...任何帮助将得到详细解释赞赏.. 。
答案 0 :(得分:5)
这不是“范围”的问题,而是时间问题。
将num
设置为2会产生副作用。foo(2)
立即执行 并将结果(垃圾)传递给{{1 }}。 (也就是说,setTimeout
不在超时回调中作为/运行。)
在约100毫秒后调用foo(2)
。匿名函数充当回调函数,后者又会调用foo(5)
,这会产生向foo(5)
分配5的副作用。
立即提醒 。该值将为“num = 2”,因为num
现在 (好吧,就在之前;-)但回调中的foo(2)
将会稍后运行 (因此没有机会设置foo(5)
)。
快乐的编码。