1. 程式人生 > >es6和es5中的this指向

es6和es5中的this指向

 

先看一段程式碼:

var name = "window";
var obj = {
      name: 'obj',
      //普通函式
      one: function(){
      console.log(this.name)
    },
//箭頭函式
two: ()=> {
    console.log(this.name)
    },
//普通函式中的箭頭函式
three: function(){
  (()=>{
  console.log(this.name)
    })()
  },
//多層箭頭函式
four: ()=> {
    (()=>{
    console.log(this.name)
  })()
  }
}
obj.one(); //obj
obj.two(); //window
obj.three(); //obj
obj.four() //window

說明:

1、

①普通函式中的this總是指向它的直接呼叫者;

②箭頭函式中的this是在定義函式的時候繫結,而不是在執行函式的時候繫結。

2、

①比如上面的 obj.one();直接呼叫者是obj,因此this指向obj

②箭頭函式中的this指向是固定的,並不是因為箭頭函式內部有繫結this的機制,實際原因是箭頭函式內部沒有this,箭頭函式的this是在定義時就繫結的,它的this就是箭頭函式所處的物件的所處作用域。

比如obj.three();箭頭函式所在的物件是函式three,函式three處於obj的作用域中,因此this指向obj;

比如obj.four();箭頭函式所在的物件是obj,obj處於window的作用域中因此this指向window。

3、

es6函式寫法有2種,一種是 fn: (str) => { } ; 一種是 fn(str){ }

箭頭函式是沒有上下文的、this會直接指向上一級

第二種寫法this指向呼叫它的呼叫者