# 作用域

作用域就是一个变量能被访问的范围。

  1. 一个函数就是一个作用域。
  2. 内层函数可以访问外层函数定义的变量,但是外层函数不能访问内层的。
  3. JS是静态作用域,也就是函数在创建的时候就决定了它能访问哪些变量。

# 作用域链

由于内层函数可以访问外层函数定义的变量(this,arguments对象除外),所以当在函数内搜索一个变量时,

先在当前函数内找,找到就不继续外层函数找,一直到JS的宿主环境。

这就是作用域链。

由于每个函数在被调用时都会自动取得两个特殊变量:this 和 arguments。

内层函数要访问外层函数的this或者arguments,需要把外部作用域中的this或者arguments对象保存在一个内层函数能够访问 到的变量里(通常叫self或者that),这样就可以让内层函数访问this或者arguments了,

var name = "The Window"; 
var object = { 
 name : "My Object", 
 getNameFunc : function(){ 
      var that = this; 
      return function(){ 
        return that.name; 
      }; 
 } 
}; 
alert(object.getNameFunc()()); //"My Object"