setTimeout的作用域

scope of setTimeout

本文关键字:作用域 setTimeout      更新时间:2023-09-26

假设我有一个这样的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……我有结果,但不能理解行为……任何帮助将感激与详细解释…

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

  1. 会产生将num设置为2的副作用。foo(2)现在执行,结果(垃圾)传递给setTimeout。(即在超时回调中,foo(2)而不是作为/运行)

  2. 将在~100毫秒后调用foo(5)。匿名函数作为回调函数,反过来调用foo(5),这将产生将5赋值给num的副作用。

  3. 提醒现在。值将是"num = 2",因为foo(2)现在运行(好吧,就在之前;-),但foo(5)回调将在稍后的一段时间运行(因此没有机会设置num)。

快乐编码。