和变量不同,关键字this没有作用域的限制,嵌套的函数不会从调用它的函数中继承this。如果嵌套函数作为方法调用,其this的值指向调用它的对象。如果嵌套函数作为函数调用,其this值不是全局对象(非严格模式下)就是undefined(严格模式下)。很多人误以为调用嵌套函数时this会指向调用外层函数的上下文。如果你想访问这个外部函数的this值,需要将this的值保存在一个变量里,这个变量和内部函数都在同一个作用域内。通常用self来保存this。
——《犀牛书》8.2 函数调用
首先,应该意识到java和js是两种不同的语言
第二,牢记:方法的this-->调用它的对象
下面是犀牛书中的例子,看见var self=this,说明要给嵌套函数用
var o={ //对象o
m:function(){ //对象中的方法m
var self=this; //this不是方法"m"的是对象"o"的
console.log(this===o) //true
f();
function f(){
console.log(this===o); //false,this是全局对象或者undefined
console.log(self===o); //true
}
}
}
例题:以下代码的运行结果
var obj={
a:1,
b:function(){alert(this.a)}
}
var fun=obj.b
fun()
A.a B.1 C.undefined D.无响应
答案:C
解析:fun访问的是对象obj的b属性,即var fun=function(){alert(this.a)}。this值要等到代码执行的时候才能确定