为了账号安全,请及时绑定邮箱和手机立即绑定

一道关于Javascript变量作用域的面试题

一道关于Javascript变量作用域的面试题

慕森卡 2018-08-01 17:19:39
 var a = 100;
    (function(){
        console.log(a);
        var a = 10;
    })();

输出的结果为何是undefined, 如何修改结果输出100?


查看完整描述

2 回答

?
肥皂起泡泡

TA贡献1461条经验 获得超5个赞

这段代码其实是这样

var a = 100;
(function(){
    var a;
    console.log(a);
    a = 10;
})();

所以console.log(a)的时候JS引擎找到了作用域中的变量a,但是其值是undefined

至于你想要让它输出100,那方法就多了去了,我提供个自己的

var a = 100;(function(num){
    var a = num;
    console.log(a);})(a);

把外部作用域的a的值通过参数传入函数中,然后打印出来。这其实挺有用的。

另外说一下上面同学的第二个例子,这个例子其实不太好,因为有点混淆了。

首先if,for之类的操作符不会创建一个私有的作用域

if (true) {    var b = 1000;
}console.log(b);//1000,在外部也可以调用,实际上就是在全局的声明

然后上面这个例子

var a = 100;if(true){    console.log(a);    var a = 10;
}

其实就是

var a = 100;console.log(a);var a = 10;

感觉容易搞混。


查看完整回答
反对 回复 2018-08-05
  • 2 回答
  • 0 关注
  • 782 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信