this用法详解
- this永远指向调用自己(this本身)的函数对应的对象。
- 包含this的函数只在乎是谁调用了它,跟在哪里进行的函数声明没有关系。
看一个例子
function test() {
var a = 1;
console.log(this.a);
}
test(); // undefined
// test是全局调用(window对象调用),所以this对应的是window
// this.a也是指向的是全局的变量a
// window对象中没有声明a这个变量,所以是undefined
再看一个例子
var a = 2;
function test() {
var a = 1;
console.log(this.a);
}
test(); // 2
一个经典的例子
var name = 'China';
var obj = {
name : 'America',
show : function() {
console.log(this.name);
}
}
obj.show(); // America
// 包含this的函数是show(),而show函数是通过对象obj调用的。
改变一下上述的经典例子
var name = 'China';
var obj = {
name : 'America',
show : function() {
return function() {
console.log(this.name);
}
}
}
var a = obj.show();
a(); // China
这里的obj.show()返回的是一个匿名函数,然后赋值给a。
// 上述等价于
var a = function() {
console.log(this.name);
}
// 或者
function a() {
console.log(this.name);
}
最后执行的是a() == window.a()。a中的this是指向全局的(this == window)