使用 function f() {} 或者 var f = function() {} 来定义的函数,this 是指向 全局对象
var a = {
b: 1,
c: function(){
function d() {
alert(this.b);
};
d();
}
};
javascript机制会在此函数里寻找b,发现此函数没有b,于是通过作用域链找到c方法,在里面也没有找到b,于是输出undefined(因为这个匿名函数不属于a对象,只不过是c方法属于a对象,所以作用域链是不会链接到a对象的,而是指向全局对象)
var a = {
b: 1,
c: function(){
var that = this;
function d() {
alert(that.b);
};
d();
}
};
修改后输出 1 ,that缓存了c 方法的作用域链