摘要:箭頭函式也有可能會有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...