下面这段代码的输出是 3

var b = 3;
(function(){
    b = 5;
    var b = 2;
})();
console.log(b);

立即执行函数内部,var发生变量提升,结果相当于 (function(){ var b; b=5; b=2; })()
所以这个立即执行函数并没有改变全局环境中的b,所以全局环境中的b依旧是3。

立即执行函数,执行完毕后会立即销毁,所以立即执行函数内部的变量b就被回收了,但是全局变量b不会被回收,所以console.log输出的就是全局变量b=3

自执行函数内部因为有var声明的存在,b相当于是私有作用域内的赋值,倘若没有var,b的赋值会是全局作用域下。能在外部输出。

函数 && 变量重新申明

有var重新声明——函数内部使用的是“自身”的变量,对变量的改变并不影响外部

没有var重新声明——函数内部使用的是外部的变量,对变量的改变影响外部

posted @ 2023-11-10 12:50  龙陌  阅读(37)  评论(0)    收藏  举报