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

为何JavaScript IIFE中第二个console.log输出函数体而非20?

为什么命名IIFE里给函数名赋值后输出不变?

这是因为你写的是命名函数表达式(Named Function Expression),这种写法里的函数名b是函数内部的只读绑定,只能用来在函数内部引用自身(比如递归调用),没办法直接修改它的值。

看你的代码:

(function b() {
  console.log(b);
  b = 20;
  console.log(b);
})();

当你执行b = 20时,这个赋值操作其实是无效的——JS引擎会把b当作只读标识符,直接忽略你的赋值(如果是严格模式下,还会直接抛出TypeError错误),所以两次console.log输出的都是函数本身。

如果要修改并输出数值,得在函数内部声明一个普通变量:

// 用let声明同名变量(会覆盖内部的只读绑定)
(function b() {
  let b = 20;
  console.log(b); // 输出20
})();

// 或者用不同变量名更清晰
(function b() {
  let value = 20;
  console.log(value); // 输出20
})();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:09:51