Day 59/100 箭頭函式和普通函式的區別
寫在前面的話
看了資料,才發現之前面試回答的有多扯...
落後捱打,沒毛病啊
(一) 箭頭函式的this指向規則
1、箭頭函式沒有prototype(原型),所以箭頭函式本身沒有this
let a = () =>{};
console.log(a.prototype); // undefined
2、箭頭函式的this指向在定義的時候繼承自外層第一個普通函式的this。
3、不能直接修改箭頭函式的this指向
call顯示繫結this指向失敗了,包括aaply、bind都一樣。
去修改被繼承的普通函式的this指向,然後箭頭函式的this指向也會跟著改變
4、嚴格模式和非嚴格模式下它的this都會指向window(全域性物件)
5、箭頭函式的this指向全域性,使用arguments會報未宣告的錯誤
6、rest引數獲取函式的多餘 引數
這是ES6的API,用於獲取函式不定數量的引數陣列,這個API是用來替代arguments的,API用法如下:
let a = (first, ...abc) => {
console.log(first, abc); // 1 [2, 3, 4]
};
a(1, 2, 3, 4);
7、使用new呼叫箭頭函式會報錯
(二)注意事項
1、一條語句返回物件字面量,需要加括號,或者直接寫成多條語句的return形式,否則像func中演示的一樣,花括號會被解析為多條語句的花括號,不能正確解析
var func1 = () => { foo: 1 }; // 想返回一個物件,花括號被當成多條語句來解析,執行後返回undefined
var func2 = () => ({foo: 1}); // 用圓括號是正確的寫法
var func2 = () => {
return {
foo: 1 // 更推薦直接當成多條語句的形式來寫,可讀性高
};
};
2、箭頭函式在引數和箭頭之間不能換行!
3、箭頭函式的解析順序相對靠前
不適用場景:箭頭函式的this意外指向和程式碼的可讀性。
參考連結:
https://www.cnblogs.com/biubiuxixiya/p/8610594.html
https://blog.csdn.net/m0_37686205/article/details/88776259
相關文章
- # 普通函式和箭頭函式的區別函式
- 箭頭函式與普通函式區別函式
- 箭頭函式與普通函式的區別函式
- 箭頭函式和普通函式的10個區別函式
- 面試題:箭頭函式和普通函式的區別面試題函式
- 簡述箭頭函式和普通函式的區別函式
- 箭頭函式、簡寫函式、普通函式的區別函式
- 詳解箭頭函式和普通函式的區別以及箭頭函式的注意事項、不適用場景函式
- 前端面試ES6系列:箭頭函式和普通函式的區別前端面試函式
- 深入理解箭頭函式和傳統函式的區別函式
- JavaScript建構函式和普通函式的區別JavaScript函式
- 箭頭函式函式
- 2022年了你還不瞭解箭頭函式與普通函式的區別嗎?函式
- 建構函式與普通函式的區別函式
- vue2專案中 箭頭函式和普通函式里面 this的指向有何不同?Vue函式
- 箭頭函式中的this函式
- JavaScript 箭頭函式JavaScript函式
- TypeScript 箭頭函式TypeScript函式
- javascript箭頭函式JavaScript函式
- JS箭頭函式JS函式
- 箭頭函式this指向的陷阱函式
- 箭頭函式的this指向(二)函式
- 有關箭頭函式函式
- 箭頭函式詳解函式
- setTimeout中的this指向問題和箭頭函式結合的區別函式
- 函式宣告和函式表示式的區別函式
- prop()函式和attr()函式的區別函式
- strcpy函式和memcpy函式的區別函式memcpy
- 從settTimeout到匿名函式、箭頭函式之() => {}函式
- JS中的箭頭函式與thisJS函式
- ES6箭頭函式函式
- 箭頭函式this指向詳解函式
- [譯]箭頭函式 vs .bind()函式
- JavaScript函式宣告和函式表示式區別JavaScript函式
- jquery position()函式和offset()函式的區別jQuery函式
- 教辨別this指向問題 包括箭頭函式函式
- jquery的$.each()函式和$.map()函式的區別jQuery函式
- ES6箭頭函式的使用函式