# 作用域
作用域就是一个变量能被访问的范围。
- 一个函数就是一个作用域。
- 内层函数可以访问外层函数定义的变量,但是外层函数不能访问内层的。
- 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"