this是javascript的一个关键字,也是比较容易令人迷糊的一个概念

this的本质:当前对象的所有者

示例1

var x = 1;
function test() {
alert(this.x);
}
test();


在之前的“JS执行顺序”文章中讲过,这个test函数会被先编译为一个全局变量,如

var test = function test() {
alert(this.x);
};


所以这个this所属对象为全局对象,this.x 就是全局变量 x,alert弹出值为'1'

示例2

var x = 2;
function test() {
alert(this.x);
}
var obj = {};
obj.x = 1;
obj.func = test;

o.func();


这个输出结果为'1',因为这里test被赋给了对象obj,this的所有者就是obj,this.x 也就是 obj.x

示例3

下面这个例子比较有迷惑性,是一个比较容易出错的情况

function test() {
alert(this.title);
}
<input type="button" value="test" onclick="test()" title="i am button"/>


输出的结果:undefined

其实onclick="test()",相当于

function onclick(event){
test();
}


是一个全局的function,上面的 test方法也是全局的function,而全局变量中并没有定义 title,所以结果为 undefined