js作用域链的问题
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()()); //The Window
当在函数中访问一个变量的时候,搜索顺序是先搜索自身的活动对象(即return的function),如果存在则返回,如果不存在将继续作用域链 上一个函数(即getNameFunc), 在return 的function作用域中是存在this.name的,即window.name,所以没有必要再向上一个作用域去找。function才是作用域, object={}不是作用域。第一个作用域this就是有的啊,就是window对象,所以不用在找了。
this去掉之后在return function的作用域和getNameFunc的作用域中都找不到name了,只能到全局作用域中找到name = The Window。
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return name;
};
}
};
alert(object.getNameFunc()()); //The Window
当你你试着写成这样时,因为现在return function的作用域,找不到再到和getNameFunc的作用域中找就找到了name=test
var name = "The Window";
var object = {
name: "My Object",
getNameFunc: function () {
var name = "test";
return function () {
return name;
};
}
};
alert(object.getNameFunc()()); //test