古詩詞大全網 - 藝術簽名 - 如何使用JS匿名函數

如何使用JS匿名函數

這次給大家帶來的是如何使用JS匿名功能,使用JS匿名功能有哪些註意事項。下面是壹個實際案例。讓我們來看看。

匿名函數的基本形式是(function(){...}) ();

前括號包含函數體,後括號是將參數傳遞給匿名函數並立即執行。

匿名函數的作用是避免全局變量的汙染和函數名的沖突。

每當妳讀代碼的時候,妳必須註意匿名函數。有時它們被稱為lambda,有時它們是匿名函數。反正我覺得他們不好用。

如果妳不知道什麽是匿名函數,這裏有壹句名言:

匿名函數是在運行時動態聲明的函數。它們被稱為匿名函數,因為與普通函數不同,它們沒有函數名。—海倫·愛默生,Helephant.com

匿名函數的形式如下:

函數(){...密碼...}

運籌學

(args)= & gt;{ ...密碼..}

我試圖讓妳明白,匿名函數通常只在絕對必要的時候使用。匿名函數不應該是首選,應該在原因已知的情況下使用。當妳理解了這個想法,妳的代碼會變得更簡潔,更容易維護,更容易追蹤bug。讓我們從避免匿名函數的三個原因開始:

當妳寫代碼的時候,無論妳多麽擅長打代碼,妳總會遇到錯誤。有時候,這些錯誤很容易被發現,有時候卻不容易。

如果妳知道這些錯誤來自哪裏,就很容易被發現。為了找出錯誤,我們使用這個叫做堆棧跟蹤的工具。如果妳不知道堆棧跟蹤,goole給出了壹個很好的介紹。

假設現在有壹個非常簡單的項目:

函數start () {

(函數middle () {

(函數end () {

console . LG(' test ');

})()

})()

}

上面的代碼中有壹個非常愚蠢的錯誤,拼寫錯誤(console.log)。這個拼寫錯誤在小項目中不是大問題。

如果這是壹個包含許多模塊的非常大的項目的壹小部分,問題就大了。假設妳沒有犯這個愚蠢的錯誤,新來的初級工程師會在休假前把這個錯誤提交給代碼庫!

現在,我們必須追蹤它。使用我們的名副其實的函數,我們得到下面的堆棧跟蹤:

感謝各位初級開發者給自己的函數命名!現在我們可以很容易地跟蹤這個錯誤。

但是..壹旦我們解決了這個問題,我們就會發現另壹個bug。這次是由壹個更有經驗的開發者介紹的。這個人認識蘭達斯

結果他們偶然發現了壹個bug,我們的工作就是追查。

代碼如下:

(函數(){

(函數(){

(函數(){

console . LG(' test ');

})();

})();

})();

毫不奇怪,開發者也忘記了如何拼寫console.log!真巧!不幸的是,他們沒有命名他們的功能。

那麽控制臺會輸出什麽呢?

好吧,至少我們有壹個電話號碼,對吧?在這個例子中,我們似乎有大約7行代碼。如果我們處理壹大段代碼呢?比如壹萬行代碼?行號跨度這麽大怎麽辦?如果代碼折疊後有代碼映射文件,渲染行號是不是根本沒用?

我覺得這些問題的答案都挺簡單的,答案就是:整天想著它們會讓妳心臟特別不好。

可讀性

咦,聽說妳還不信。妳還舍不得妳的匿名功能,從來沒有出過bug。那我得向妳道歉。妳認為妳的代碼是完美的。讓我們看看這個!

請看下面兩段代碼:

函數initiate(參數){

返回新承諾((解決,拒絕)= & gt{

嘗試{

if(參數){

返回resolve(true);

}

return resolve(false);

} catch (e) {

拒絕(e);

}

});

}

啟動(真)

。然後(res = & gt{

if (res) {

doSomethingElse();

}否則{

do something();

}

).catch(e = & gt;{

日誌錯誤(電子郵件);

restartApp();

}

);

這是壹個很不正常的例子,但我相信妳已經明白了我要說的話。我們的方法返回壹個承諾,我們使用這個承諾對象/方法來處理不同的可能響應。

妳可能覺得幾段代碼不難讀,但是我覺得可以更好!

如果我們刪除所有匿名函數會怎麽樣?

函數initiate(參數){

返回新的承諾(檢查參數);

}

參數的功能檢查(解決、拒絕){

嘗試{

if(參數){

返回resolve(true);

}

return resolve(false);

} catch (e) {

拒絕(e);

}

}

函數賦值器(res) {

if (res) {

doSomethingElse();

}否則{

do something();

}

}

函數句柄錯誤(e) {

日誌錯誤(電子郵件);

restartApp();

}

啟動(真)

。然後(評估者)

。catch(handle error);

好吧,我們明確壹點:這部分代碼比較長,但是我認為它不僅可讀性更好!我們精心命名的函數不同於匿名函數,只要我們壹看到它們的名字就知道它們的功能是什麽。這避免了評估代碼的障礙。

這也有助於區分關系。與創建壹個方法、傳遞它、然後運行邏輯不同,在第二個示例中,參數被賦予then,catch只是指向所有事情發生的函數。

我沒有什麽可以讓妳相信更易讀。但是如果妳不相信,我可以試試最後壹個論點。

相信看完這個案例,妳已經掌握了方法。更多精彩請關註Gxl上其他相關文章!

推薦閱讀: