Javascript 需要帮助了解以下IIFE代码的工作原理吗

Javascript 需要帮助了解以下IIFE代码的工作原理吗,javascript,iife,Javascript,Iife,我最近在一个竞争网站上遇到了这个javascript代码,但我不明白它是如何工作的 var a= 1; (function(){ console.log(a); var a = 2; console.log(a); })(); 我希望输出是 1 2 但令我惊讶的是,最初的输出是 未定义 二, 有人能解释一下它是如何工作的吗?提前感谢。变量a的声明被带到范围的顶部。这个过程叫做吊装 var a= 1; (function(){ var a; console

我最近在一个竞争网站上遇到了这个javascript代码,但我不明白它是如何工作的

var a= 1;
(function(){
    console.log(a);
    var a = 2;
    console.log(a);
})();
我希望输出是

1 2

但令我惊讶的是,最初的输出是

未定义 二,


有人能解释一下它是如何工作的吗?提前感谢。

变量a的声明被带到范围的顶部。这个过程叫做吊装

var a= 1;
(function(){
    var a;
    console.log(a);
    a = 2;
    console.log(a);
})();
考虑一个没有IIFE和全局变量的通用代码段

函数func{ console.logx var x=2; console.logx }
我相信这就是本地化。这个函数创建了一个新的局部全局作用域。这是一个非常常见的例子。当然,网上有很多解释。