JS匿名函數內部this指向

網上看到一句話,匿名函數的執行是具備全局性的,那怎麼具備的全局性呢?
this的指向在函數定義的時候是肯定不了的,只有函數執行的時候才能肯定this到底指向誰,實際上this的最終指向的是那個調用它的對象

1.案例中,第一個say打出來的是Alan,而第二個則是window

var name = 'window'
    var person = {
        name :'Alan',
        sayOne:function () {
                console.log(this.name)
        },
        sayTwo:function () {
            return function () {
                console.log(this.name)
            }
        }
    }
    person.sayOne()//Alan
    person.sayTwo()()  // window

2.緣由

  1. 函數內部的this指向調用者
  2. sayOne調用者是person對象,因此this指向person;
  3. sayTwo的調用者雖然也是person對象,可是區別在於此次調用並無打出this而是在全局返回了一個匿名函數
  4. 而這個匿名函數不是做爲某個對象的方法來調用執行,是在全局執行

3.咱們也能夠更改this指向,這裏應用JS高級編程的案例

var name = "global";

var foo = {
    name: "foo",
    getName : function(){
        console.log(this.name);
    }
}

var bar = {
    name: "bar",
    getName : function(){
        return (function(){
            console.log(this.name);
        })();
    }
}

foo.getName(); //foo
foo.getName.call(bar); //bar
foo.getName.call(this); //global
foo.getName.call(window); //global

(function(){

    console.log(this.name)

}.bind(bar))(); //bar

(function(){

    console.log(this.name)

}.bind())(); //global
相關文章
相關標籤/搜索