JavaScript链式作用域

网上介绍js链式作用域的很多,但写的很烦杂,不好理解,现在根据网络文章整理一个简单易懂的,如下:

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

  1)首先要知道js的变量作用域,js的变量作用域就两种:全局和局部
  2)js中当前作用域能访问其上层作用域的变量和函数

2.js链式作用域的定义:

  JS权威指南的描述:
      JavaScript中的函数运行在他们被定义的作用域里,而不是他们被执行的作用域里。
      这句话很难理解,但是换做简单的描述,JS的链式作用域就是:
      JS中当遇到对变量名或者函数名的使用时,会首先在当前作用域查找变量或者函数,如果没有找到,就会到其上层作用域中寻找,并以此类推。

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

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

    上面例子中弹出的值是什么? 答案是10,这个很好理解,因为上面提到:

  2)js中上层对象中的变量和函数对其子对象都是可见的

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

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

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


原文地址:http://chourentang.iteye.com/blog/1759389

你可能感兴趣的:(js)