国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript匿名函數(shù)的寫法

2019-11-17 03:51:36
字體:
來源:轉載
供稿:網(wǎng)友
可以想像得到,有很多方法立即執(zhí)行匿名函數(shù),簡單的整理就有下面三種的典型方式(還有其他方式的,歡迎告知):



方式一
(function() {
    // …
})();

方式二
void function() {
  // …
}();



方式三
~function() {
   // …
}();

方式一 和 方式二 大家可能都看到過,這里主要說明下 方式三。在說明 方式三 之前,我們現(xiàn)回顧下運算符“~”(位取反)在 EMCAScript 中的定義(第五版的第 72 頁),簡單的翻譯下:


按運算符結合語句
將舊值轉換為 32 位整型
執(zhí)行運算符后的語句
轉換之行結果為 32 位整形并返回



從上面可以了解,其實位運算符都能立即返回后面表達式的值。其實其他位運算符都可以達到這樣的目的,例如:
!function() {
    // …
}();


等都可以達到我們的目的。所以其實用“~”也并無其他的原因,僅僅是代碼“看著好看”而已 :^)


效率
與其說三種方式執(zhí)行匿名函數(shù)的效率,到不如直接分析個運算符的執(zhí)行效率。那么我們對比再來看看“()”以及“void”在 EMCA 規(guī)范中的定義

組運算符(第五版 66 頁)

返回表達式的執(zhí)行結果
void(第五版 70 頁)

按運算符結合語句
執(zhí)行
返回 undefined
由于組運算符還需要執(zhí)行語句并返回語句塊返回的值,對比 void 會多個獲取語句塊的操作(雖然消耗不了多少的性能),因此在這種情況下 void 的性能要優(yōu)于組運算符。

對比兩者,那么 方式三 的性能對比很明顯要低于前兩者。總結起來就是光從語法的角度上分析,在上面三者匿名函數(shù)的方式中 方式二 優(yōu)于 方式一,方式三 的效率最低。



總結
思考下三者之間的優(yōu)異

方式一的寫法很常見而且很保險,所以并不會有人因為你使用這種方式而責怪你
但使用方式一的同學,可能經(jīng)常會犯忘記匹配括號的“毛病”(特別是語句塊很長時,就經(jīng)常搞錯)
使用位運算符執(zhí)行匿名函數(shù)很新潮,用來裝逼酷不錯
很多 IDE (如 IDEA)以及語法高亮工具不支持 方式三 的寫法
void 效率最好,但總感覺相比其他兩種實現(xiàn)方式非常的臃腫(僅僅多幾個字符?)
那么

綜合代碼量以及效率等情況考慮,用 方式一 沒錯的
在需要額外節(jié)省代碼的極端情況,用 方式三
考慮效率優(yōu)先,那么使用 方式二
這里要說明下,其實三種方式效率之間的差異非常小。因此單純拿效率來考慮采用那種方式,幾乎是站不住腳的。

具體采用何種方案,需要根據(jù)實際情況來考慮。比如我自己,經(jīng)常會使用方式三,是因為 1、方便(加一個字符即可) 2、在函數(shù)長的情況下匹配括號會很頭暈 3、用起來很酷,但 方式三 會經(jīng)常讓看我代碼的組員感到困擾。

如果在些類庫等框架性質(zhì)的基礎代碼,用 方式一 最保險同時大家都容易看懂,是最保險的選擇。



[原文:http://www.gracecode.com/archives/3004/  非常好,大家學習一下。] 
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 伊吾县| 南投市| 梁河县| 临沂市| 响水县| 板桥市| 东至县| 合山市| 景洪市| 柯坪县| 通州市| 栖霞市| 周至县| 泸定县| 天柱县| 大渡口区| 合山市| 巢湖市| 葫芦岛市| 达拉特旗| 海门市| 沁源县| 嘉义县| 五莲县| 河曲县| 罗平县| 高尔夫| 东港市| 梅州市| 鹿泉市| 淮滨县| 扶绥县| 南雄市| 张家界市| 饶平县| 宿松县| 黑龙江省| 宜兴市| 五家渠市| 德安县| 扎兰屯市|