首页 > 试题广场 >

下面这段代码的输出是

[单选题]
下面这段代码的输出是
var b = 3;
(function(){
    b = 5;
    var b = 2;
})();
console.log(b);

  • 5
  • 3
  • 2
  • 程序报错
立即执行函数内部,var发生变量提升,结果相当于 (function(){ var b; b=5; b=2; })() 所以这个立即执行函数并没有改变全局环境中的b,所以全局环境中的b依旧是3。
发表于 2019-09-29 16:02:40 回复(8)
发表于 2020-07-24 13:44:01 回复(2)
//原题应该是这样
var b = 3;
(function(){
b = 5;
var b = 2;
})();
console.log(b);
console在立即执行函数外面的时,访问的b是全局变量,立即执行函数里的b在执行之后就自动销毁了。

发表于 2019-09-13 19:55:36 回复(4)
立即执行函数,执行完毕后会立即销毁,所以立即执行函数内部的变量b就被回收了,但是全局变量b不会被回收,所以console.log输出的就是全局变量b=3

编辑于 2020-02-26 14:40:00 回复(0)
立即执行函数内部声明提升后相当于:
{
    var b;
    b = 5;
    b = 2;
}
由于函数内部又声明了 var b,所以b = 5和b = 2改变的都是函数内部的b,没有改变全局作用域里的b,所以输出3
如果函数内部没有 “var b = 2” 这一句,输出的就是5,如下:
var b = 3;
(function(){
    b = 5;//先找函数内部,函数内部没有b,改变的是全局作用域里的b
    //var b = 2;
})();
console.log(b);//输出5

编辑于 2022-03-14 10:17:30 回复(0)
很无语,= 5前面明显没有东西。如果这里不报错的话,那么就应该是题目给的答案,输出3,因为立即执行函数里的b变量在使用完之后就会被销毁,所以在全局输出变量b,很显然是要在全局作用域中寻找变量b的。
发表于 2019-07-21 13:45:40 回复(0)

全局变量b的值为3

立即执行函数执行之后 局部变量b为2 全局变量b变成5

在全局下打印b 打印的是全局变量b

则结果为5


在看了其他网友的思路后

原来立即执行函数预编译时变量声明提升 则全局变量实际上没有被影响

则结果应该为3

编辑于 2019-10-03 23:31:31 回复(0)
函数内部执行完会销毁
发表于 2021-09-25 13:38:04 回复(0)
自执行函数内部因为有var声明的存在,b相当于是私有作用域内的赋值,倘若没有var,b的赋值会是全局作用域下。能在外部输出。
发表于 2019-09-22 16:03:59 回复(1)
立即执行函数内部形成了一个单独的作用域,可以封装一些外部无法读取的私有变量
编辑于 2020-01-30 18:54:59 回复(1)
因為變量提升,b=5是區域變數
发表于 2020-11-17 00:00:33 回复(0)
看错了,哎呀,这是函数提升高于变量提升实际执行的顺序应该是、
(function(){
var b=5;
b=2
})
b=3
最后b为3
发表于 2020-10-24 23:41:11 回复(0)
函数  &&  变量重新申明
var重新声明——函数内部使用的是“自身”的变量,对变量的改变并不影响外部
没有var重新声明——函数内部使用的是外部的变量,对变量的改变影响外部
发表于 2020-10-16 10:55:21 回复(0)
在立即执行函数中使用了var b = 2,变量提升之后,立即执行函数中的 b 变成了局部变量。立即执行函数执行完毕后会立即销毁,所以立即执行函数内部的变量b就被回收了,但是全局变量b不会被回收,所以console.log输出的就是全局变量b=3。如果去掉var b = 2这条语句,立即执行函数中的 b 就是全局变量的b,最后输出的就是5。
发表于 2020-09-07 13:20:39 回复(0)
在立即执行函数里面,变量的声明会提升,但是立即执行函数,执行后会销毁,这道题打印的是全局的b,所以结果为3
发表于 2020-06-26 11:56:03 回复(0)
理解执行函数执行完成之后里面的变量即销毁,也不会给全局变量赋值
发表于 2019-10-18 14:26:48 回复(0)

发表于 2019-09-20 10:08:28 回复(2)
此题是考察预编译,在执行的前一刻,刚开始先创建GO对象,得到GO{ b:undefined, }然后创建立即执行函数的AO对象,有AO{ b:undefined, } 接着开始执行,然后go里面的b被赋值为3,接着执行立即执行函数然后AO里面的b被赋值为5,接着又被赋值为2,最外面的console.log(b)打印的是GO里面的a,所以是3
发表于 2022-11-08 08:38:52 回复(0)
<p>我的理解是:立即执行函数里面是一个块级作用域,形成闭包,外部无法访问,明天测试有待验证,另一个种就是立即执行函数,执行完就销毁了,根本就不存在块不块级作用域,所以只留下3</p>
发表于 2020-04-24 03:57:49 回复(0)

立即执行函数执行完之后会立即销毁不占用内存空间

发表于 2020-04-12 21:19:00 回复(0)