前端面试的一道题。

今天面试时面试官出的一道题。
let a = 2;
function X() {
alert(a);
}
function Y() {
let a = 1;
X();
}
Y();
上述代码运行的结果是什么,为什么?
如果把let都去掉,结果是什么,为什么?
#春招##实习#
全部评论
let弹出2,因为执行Y函数,Y里面执行X函数,X函数里面a没有定义,,找全局的let a=2, 去掉let结果是1,因为a是全局变量,输出后定义的
点赞 回复 分享
发布于 2018-04-18 19:24
我也觉得都弹出2,let和var的区别在于块级作用域。解析如下:这里x函数没有涉及到闭包,因此只会使用全局的a变量。而无论y函数中是var还是let都不会影响到全局的a变量。相反如果去掉var ,在y函数中直接写a=1,则会影响到全局的a变量。
点赞 回复 分享
发布于 2018-04-18 17:09
。。。好好看书啦。。。
点赞 回复 分享
发布于 2018-04-18 16:52
var 和let都弹出2。
点赞 回复 分享
发布于 2018-04-18 16:40
变量提升,作用域的确定
点赞 回复 分享
发布于 2018-04-18 16:07
弹出2,如果去掉let,弹出1,因为在函数里直接a = 1是全局变量
点赞 回复 分享
发布于 2018-04-18 15:48

相关推荐

不愿透露姓名的神秘牛友
07-01 10:56
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务