JS不全记录 - this用法详解

110 阅读1分钟

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)