猿问

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

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

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


慕森卡
浏览 954回答 2
2回答

肥皂起泡泡

这段代码其实是这样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;感觉容易搞混。
随时随地看视频慕课网APP
我要回答