首页 > 解决方案 > 为什么控制台日志在 IIFE 中起作用?

问题描述

var a = 1; 
(function a () { 
    a = 2;
    console.log("a:", a); 
})();

显然,a 作为 IIFE(立即调用的函数表达式),函数名称将覆盖全局变量 a,这是可以理解的,但是......为什么不在函数本身内将 a 重新分配给数字 2?

function a() { 
    a = 1;
    console.log("a:", a); 
};
function a() { 
    a = 2;
    console.log("a:", a); 
};
a();

为什么上面的代码表现不同?

标签: javascriptscope

解决方案


在命名的 IIFE 中,函数的名称是一个隐含的常量值。

默认情况下重新分配它不会覆盖它也不会抛出错误,但在严格模式下,你可以看到它实际上是一个常量并且会抛出一个错误:

var a = 1; 
(function a () { 
    "use strict";
    a = 2;  // throws error: Assignment to constant variable
    console.log("a:", a); 
})();


推荐阅读