JavaScript中的this

和变量不同,关键字this没有作用域的限制,嵌套的函数不会从调用的函数中继承this
如果嵌套函数是方法调用,其this的值指向调用他的对象
如果嵌套函数作为函数调用,其this值不是全局对象(非严格模式)就是undefined(严格模式)

很多人误以为调用嵌套函数时this会指向调用外层函数的上下文.如果你想访问这个外部函数的this,
需要将this的值保存在一个变量里,这个变量和内部函数都在同一个作用域内,通常使用变量self(_this)来保存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var o = {
m:function(){
var self = this;
console.log(this === o); // =>1
console.log(this === window); // =>0

function f(){
console.log(this === o);// =>0
console.log(this === window);// =>1
console.log(self === o);// =>1
}
f();
}
}
o.m();