作用域链

JavaScript解释器在执行代码时是如何查找变量的?

var x = 10;
function test1() {
    var y = 11;
    function test2(){
        var z = 12;
        function test3(){
            var a = 13;
            console.log(a);
            console.log(z);
            console.log(y);
            console.log(x);
        }
        test3();
    }
    test2();
}
test1();

如果把以上的代码在浏览器的环境下运行,那么它们的全局对象与调用对象如下图所示:

0a09b80d87db90ae6188a4c575357001

所以由此可见,正在被执行的函数,它的作用域处于作用域链的最顶端。查找变量时也是从作用域链的顶端向底部开始查找,直到第一次查找到变量就使用此变量。如果一至到了window的全局对象中都还没有找到变量,那么会抛出变量没有申明的异常。

posted @ 2015-03-20 22:14  wangg_mail  阅读(115)  评论(0编辑  收藏  举报