use*_*035 2 javascript scope settimeout
假设我有一个像这样的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
}
Run Code Online (Sandbox Code Playgroud)
什么是使用1和3 ..... 2和3的结果...我有结果,但无法理解行为......任何帮助将得到详细解释赞赏...
小智 5
这不是"范围"的问题,而是时间问题.
将设定的副作用num比2 foo(2)被执行,现在和结果(垃圾)被传递给setTimeout.(也就是说,foo(2)是不是如/在运行超时回调.)
将foo(5)在约100毫秒后调用.匿名函数充当回调,而回调又会foo(5)产生分配5的副作用num.
现在提醒.该值将是"数= 2",因为foo(2)跑了,现在(好吧,之前;-)但foo(5)在回调将运行在一段时间后(并因此一直没有机会来设置num).
快乐的编码.