闭包作用域问题,新手表示不理解

//闭包

var a = 5;

var color = 'red';

function woot(){

    console.log(color)      //red

    console.log(a)          //undefined

    var a = 6;

    function test(){

        console.log(a == 6);   //true

    }

    test();

}

woot();

问题:我在window全局变量下定义了两个变量,分别是变量a和color,我们知道这两个变量是基本值类型number和string,然后在下面定义了一个闭包,但是在woot函数里面能访问到color的值red,却输出不了a的值5,根据我学过的知识,知道作用域链是里面的能访问上一层作用于链,层层递进直到window全局,但是在我这个例子中却有点说不通,因为在woot里面并没有输出a的值,哪位大神能否解答一下。


下面是我画的作用域图:

https://img3.mukewang.com/5c482eb4000103ec03210380.jpg

慕田峪9158850
浏览 467回答 1
1回答

qq_笑_17

function woot(){    console.log(color)      //red    console.log(a)          //undefined    var a = 6;     function test(){        console.log(a == 6);   //true    }    test();}单看woot函数,其中先console.log(a),但是后面就是var a = 6;,变量和函数定义都会提升,也就是上面代码会变成下面这样。function woot(){    function test(){        console.log(a == 6);   //true    }    var a;    console.log(color)      //red    console.log(a)          //undefined    a = 6;     test();}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript