在第一篇里简单介绍了函数的四种调用方法,这里再来详细说一下this的意义与用法。

this具体是指什么,在java权威指南中如此定义:函数在被调用时会拥有一个值,就是本次调用的上下文(context),这个就是this关键字的值。“如果函数挂载在一个对象上,作为对象的一个属性,就称它为对象的方法。当通过这个对象来调用函数时,该对象就是此次调用的上下文,也就是该函数的this的值。”

和变量不一样,this没有作用域的限制,当该函数没有上下文时,函数中的this通常是undefined或者是全局的window。比如:

var a = 0;
function s() {
    var a = 1;
    console.log(this.a);
}
var b = s;
b();

输出的是0。因为s是这个函数是作为函数来调用的,所以this是window。

如果函数出现嵌套的情况,那么内部嵌套的函数this是指什么呢。同理,如果是作为方法,它是指调用它的对象,如果是作为函数调用,它就是window或者undefined。如果想访问外部函数的this,一般都用self或者that(非关键字)来代替this。

var obj = {
    func : function() {
        var that = this;
        funcInside();
        function funcInside() {
            console.log(this);// window 
            console.log(that);// obj
        };
    }
};

obj.func();

可以看出来,一个是window,一个是obj。