javascript中的this

var name = "Bob";
var nameObj ={
    name : "Tom",
    showName : function(){
        alert(this.name);
    },
    waitShowName : function(){
        setTimeout(this.showName, 1000);
        setTimeout(function(){
            nameObj.showName()
        }, 1000);
  }
};
nameObj.waitShowName();

一般而言,在Javascript中,this指向函数执行时的当前对象

The this keyword is relative to the execution context, not the declaration context.

  • 当没有明确的执行时的当前对象时,this指向全局对象window。
            var obj = {
                 bar: "bar",
                 foo: function(){
                     console.log(this);
                 }
             };
             obj.foo();
             var bar = obj.foo;
             bar()
  • 在浏览器中setTimeout、setInterval和匿名函数执行时的当前对象通常是是全局对象window,当然也有例外


    foo(function (){
        console.log(this)
    });


    function foo(fn){
            fn.call({});
        }

    //el.addEventListener('click', bar, false);

*eval函数 指向当前执行环境

var name = "window";

var Bob = {
    name: "Bob",
    showName: function(){
        eval("alert(this.name)");
    }
};

Bob.showName();    //Bob

当然还有很多很多例子,
涉及 new 还有es5中的 call,apply,bind, 以及es6中的() => {} lambda
有趣的例子(λx.x*x)(λx.x+2) js可以写成 (x => x + 2)((x => x * x)(2))
不一一列举了。

你可能感兴趣的:(javascript中的this)