为何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
相关产品推荐
相关产品推荐

