You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何let声明的foo函数在setTimeout中执行输出为1而非2?

为什么输出是1而不是2?

先看你的代码:

let foo = function(){
    console.log(1);
}
setTimeout (foo,1000);

foo = function(){
    console.log(2);
}  

核心原因在于setTimeout的工作逻辑:

  • 当你调用setTimeout(foo, 1000)时,JavaScript会立刻把当前foo指向的那个打印1的函数的引用存起来,等着1秒后执行。
  • 之后你把foo重新赋值成打印2的函数,只是改变了foo这个变量的指向,但之前传给setTimeout的那个旧函数引用已经被单独保存了,不会跟着foo的变化而变。
  • 1秒时间到后,setTimeout执行的是它之前存好的旧函数,所以输出的是1。

说白了,setTimeout拿的是当时函数的“快照”,不是变量本身,变量后来怎么改都不影响已经存好的那个函数。

内容的提问来源于stack exchange,提问作者sujithrakumaran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 06:02:34