每个函数在被调用时都会自动取得两个特殊变量:this和arguments;内部函数在搜索这两个变量时,只会搜索到其活动对象为止,因此永远不可能直接访问外部函数中的这两个变量。
f 1 var name = "The Window" 2 3 var object = { 4 name: "My Object", 5 getNameFunc : function() { 6 console.log(this.name); //输出:My Object 7 return function() { 8 return this.name 9 } 10 } 11 } 12 13 console.log(object.getNameFunc()()); //输出:The Window
不过,把外部作用域中的this对象保存在一个闭包能够访问到的变量里,就可以让闭包访问该对象了,例子如下:
1 var name = "The Window" 2 3 var object = { 4 name: "My Object", 5 getNameFunc : function() { 6 var that = this //重点在本行 7 console.log(this.name); //输出:My Object 8 return function() { 9 return that.name 10 } 11 } 12 } 13 14 console.log(object.getNameFunc()()); //输出:My Object
知识点:红宝书182页