箭頭函數與this

一句話歸納就是: 箭頭函數的this與建立時的封閉詞法上下文的this保持一致。

準確一點說應該是,箭頭函數沒有本身的this以及arguments,所能取到的this是它被建立時的封閉詞法上下文。這時候會造成一個閉包,箭頭函數將其詞法做用域內的this記錄在scope屬性上。箭頭函數使用call,apply,bind傳遞做用域會被忽略, 可是能夠用來傳遞參數,此時第一個參數應該設置爲null。如下爲實例:閉包

const foo = ((...rest) => { console.log(this) })
let foo1 = foo.bind({demo: 1}, 'demo')
// window
foo1()
function Foo() {
// Foo 實例
  console.log(this)
  this.obj = {
    // window
    foo: foo,
    // obj
    bar() { console.log(this)    },
    // Foo實例
    zoo: () => { console.log(this) },
      callF() { this.foo(), this.bar(), this.zoo() }
  }
}
let demo = new Foo()
demo.obj.callF()
相關文章
相關標籤/搜索