我經常的使用箭頭函數,卻尚未對箭頭函數有個深刻的瞭解,如今找一下這2個函數的不一樣點函數
因爲箭頭函數沒有原型,所以箭頭函數自己沒有thisthis
let a = () => {} console.log(a.prototype) // undefined let b = function () {} console.log(b.prototype) // Object
let a; let barObj = { msg: 'bar的this指向' } let fooObj = { msg: 'foo的this指向' } bar.call(barObj) foo.call(fooObj) // { msg: 'bar的this指向' } bar.call(fooObj) a() // { msg: 'foo的this指向' } function foo() { a() } function bar () { a = () => { console.log(this) } }
從上面例子中能夠得出2點:prototype
let b = () => { console.log(arguments); } b(1,2,3,4) // arguments is not defined function bar () { console.log(arguments); // 完成第二個普通函數 bb('完成第一個普通函數') function bb() { console.log(arguments); // 完成第一個普通函數 let a = () => { console.log(arguments); // 完成第一個普通函數 } a('箭頭函數') } } bar('完成第二個普通函數')
從上面能夠得出如下2點code
不管箭頭函數的this指向哪裏,使用new調用箭頭函數都會報錯,箭頭函數沒有構造函數繼承
let a = () => {} let b = new a() // a is not a constructor