5種應該避免使用箭頭函式的情況

2021-09-21 12:59:52 字數 1582 閱讀 3618

摘要:箭頭函式也有可能會有bug…

箭頭函式雖然因語法簡練受人追捧。但由於沒有 this 會導致在一些情況下出現預想不到的意外情況。

比如在物件中定義乙個方法:

this

.food =

"banana"

;let obj =};

obj.

log();

// 列印"strawberry"

看起來很完美呼叫這個方法能夠按照預期,獲得物件的 food 屬性

但如果將其改為箭頭函式:

this.food =

"banana"

;let obj =};

obj.log(

); // 列印"banana"

由於箭頭函式自身沒有 this 會導致自動繼承外層的 this 導致列印出的變數出錯,這個 bug 有點坑。。

因此不要在物件方法中使用箭頭函式。

因為沒有 this 導致 this 指向錯誤,所以在定義 prototype 方法上一定記得不要使用箭頭函式

this

.name =

"oli"

;// this 從外層基礎

function

person

(name)

person.prototype.

log=()

=>

;let p =

newperson()

;p.log();

// 列印"oli"

因為箭頭函式沒有 arguments 因此如果外層是另外乙個函式,那麼 arguments 是這個外層函式的

function

foo();

}foo([

1,2,

3])(

[1,2

,3,4]);

當然可以使用 rest 操作符獲取對應的引數

如果你需要你的上下文是可變的,動態的,那麼不要使用箭頭函式

比如在乙個頁面中,我們需要為每乙個 p 元素增加乙個事件處理函式,那麼:

document.

queryselectorall

('p').

foreach

(elem =>)}

)

改為普通函式才可以正確訪問到預期的 this:

document.

queryselectorall

('p').

foreach

(elem =>)}

)

因 caller 早已不再是推薦的標準,應該在任何時候都避免使用 caller 這裡就不多說了

其他情況下尤其是 map reduce foreach 等並沒有什麼複雜的邏輯的時候使用箭頭函式能夠增加閱讀體驗,想必是極好的。

專案中應該避免的情況

1.測試過程中不加思考的機械性測試執行。測試就像建築一樣,先打好圖紙,然後在施工。測試的過程中應該多思考,而不是悶頭呆板的執行。測試的過程中,雖然我們巨集觀上有三輪的指導,但是我們應該將任務加以細化,具體到功能模組,每天分配合理的任務量。2.自以為正確 專案測試的過程中遇到自己解決不了,不確定的事情...

箭頭函式及箭頭函式中this的使用

1.定義函式的方式 function const aaa function 3.es6中的箭頭函式 const ccc 引數列表 3.1 有乙個引數 括號可省略 const sum num1 3.2 有兩個引數 const sum num1,num2 3.3 函式 塊中有多行 時 依次寫 const...

箭頭函式的使用

需求 每過1秒顯示隱藏教育 test click destoryvm destory vmbutton v show isshow 教育p div new vue mounted 1000 錯誤原因 這裡setinterval呼叫匿名函式後導致this傳送改變,變成了window new vue m...