這篇文章帶給大家的內容是關於JavaScript普通函數和箭頭函數有什麼不同?有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
我常常的使用箭頭函數,卻還沒有對箭頭函數有個深入的了解,現在找一下這2個函數的不同點
由於箭頭函數沒有原型,因此箭頭函數本身沒有this
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) } }
從上面例子可以得到:
箭頭函數的this指向定義時所在的外層第一個普通函數,跟使用位置沒有沒有關係被繼承的普通函數的this指向改變,箭頭函數的this也會跟著改變。
不能直接修改箭頭函數的this
可以透過修改被繼承的普通函數的this指向,然後箭頭函數的this也會跟著改變
3. 箭頭函數使用arguments
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點
無論箭頭函數的this指向哪裡,使用new呼叫箭頭函數都會報錯,箭頭函數沒有建構子
let a = () => {} let b = new a() // a is not a constructor
【相關推薦:JavaScript影片教學】
以上是JavaScript普通函數和箭頭函數有什麼差別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!