js链式作用域

【前言】

网上介绍js链式作用域的很多,但写的很烦杂,不易理解,现在整理一个简单易懂的

【详解】

(1)理解js的链式作用域的前提 

  ①首先要知道js的变量作用域,js的变量作用域就两种:全局和局部 

  ②js中当前作用域能过访问其上层作用域的变量和函数 

(2)js链式作用域的定义: 

  JS权威指南的描述: 

      JavaScript中的函数运行在他们被定义的作用域里,而不是他们被执行的作用域里。 

  这句话很难理解,但是换做简单的描述,JS的链式作用域就是: 

      JS中当遇到对变量名或者函数名的使用时,会首先在当前作用域查找变量或者函数,如果没有找到,就会到其上层作用域中寻找,并以此类推。 

      下面这个例子在很多博文中引用: 

var x = 10;  
function test() {  
    alert(x);  
}  
test();  

    上面例子会弹框提示10,这个很好理解,因为上面提到:js里上层对象中的变量和函数对其子对象都是可见的 

  下面对这个例子稍微变换下: 

var x = 10;  
function test() {  
    alert(x);  
    var x = 2;  
}  
test();  

    改变后的例子弹出的值是什么?答案是undefined,用JS链式作用域来理解,函数test在执行时,会先在其本身的作用域中寻找,而函数本中是定义了x的,就不会在向上层寻找,但是是定义在alert之后,因此alert会弹出undefined,如果函数内没有定义x,就像最初的例子,那么就会在其上层作用域寻找,就是10 

猜你喜欢

转载自570109268.iteye.com/blog/2413190