作用域链
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();
如果把以上的代码在浏览器的环境下运行,那么它们的全局对象与调用对象如下图所示:
所以由此可见,正在被执行的函数,它的作用域处于作用域链的最顶端。查找变量时也是从作用域链的顶端向底部开始查找,直到第一次查找到变量就使用此变量。如果一至到了window的全局对象中都还没有找到变量,那么会抛出变量没有申明的异常。