日期:2014-05-16  浏览次数:20328 次

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