setTimeout的范围

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

这不是"范围"的问题,而是时间问题.

  1. 将设定的副作用num比2 foo(2)被执行,现在和结果(垃圾)被传递给setTimeout.(也就是说,foo(2)不是如/在运行超时回调.)

  2. foo(5)在约100毫秒后调用.匿名函数充当回调,而回调又会foo(5)产生分配5的副作用num.

  3. 现在提醒.该值将是"数= 2",因为foo(2)跑了,现在(好吧,之前;-)但foo(5)回调将运行在一段时间后(并因此一直没有机会来设置num).

快乐的编码.