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

为何代码中第二个console.log()输出2而非1?技术咨询

为啥第二个console.log输出2而非1?

嘿,这个问题问得很到位!咱们一步步拆解这段代码的执行流程,就能搞明白背后的原因啦~

首先先把你的代码清晰列出来:

function f() { console.log(2); } 
f(); 
(function() { 
  f(); 
  f = function() { console.log(1); } 
})();

咱们按代码执行的顺序来分析:

  • 第一步:在全局作用域中定义了函数f,它的功能就是打印数字2。
  • 第二步:调用f(),这时候直接执行原函数,输出第一个2。
  • 第三步:执行立即执行函数表达式(IIFE),这个函数会立刻运行内部的代码:
    1. 先执行f():这时候f还没有被重新赋值,依然是最初那个打印2的函数,所以这一步输出第二个2。
    2. 再执行f = function() { console.log(1); }:这时候才把全局的f替换成了新的函数——这个新函数会打印1。但注意,替换操作是在调用之后才完成的,所以之前的调用用的还是老函数。

简单来说,关键就是执行顺序:IIFE里是先调用老的f,再给f赋值新函数,而不是先赋值再调用。如果把这两行的顺序调换,那第二次输出就会是1啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:27:20