天天看點

箭頭函數沒有綁定this

箭頭函數沒有綁定this

  • 不要把【箭頭函數】和【箭頭函數的定義函數】弄混淆
  • ecma262規範中明确規定,箭頭函數根本沒有自身的this綁定
  • 在函數執行前綁定this的時候,傳入的thisArgument會被直接忽略

也就是說箭頭函數本身沒法修改this,是以對this通路永遠是它繼承外部上下的this按照babel的實作來說,在箭頭函數内部沒有this引用的時候,預設編譯成這樣

var f = function(v) {
  return v;
};
           

但是如果箭頭函數内部使用了this,就成了

function test() {
  var _this = this;

  var f = function f(v) {
    return _this.a;
  };
}
           

這個實作是符合标準的,全程沒有綁定這回事。是以結論就是:

“箭頭函數”的this,總是指向定義時所在的對象,而不是運作時所在的對象。
           

這句話完全正确,而且語言是通過忽略對箭頭函數的所有綁定操作來實作的,而不是簡單的傳回一個綁定this的閉包。