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

首頁 > 編程 > JavaScript > 正文

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

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



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

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



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

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


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



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


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


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

組運(yùn)算符(第五版 66 頁)

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

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

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



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

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

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

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

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



[原文:http://www.gracecode.com/archives/3004/  非常好,大家學(xué)習(xí)一下。] 
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宁德市| 沙洋县| 井研县| 神农架林区| 屏东市| 牟定县| 吉水县| 墨竹工卡县| 绥芬河市| 德钦县| 盘锦市| 沂南县| 肇源县| 宽城| 方正县| 石柱| 岳阳县| 铁力市| 柏乡县| 永泰县| 竹溪县| 安宁市| 行唐县| 乌审旗| 五大连池市| 全南县| 高密市| 祁门县| 西平县| 同仁县| 台湾省| 乌兰察布市| 金湖县| 松潘县| 利辛县| 剑川县| 会泽县| 万宁市| 武定县| 长沙市| 南通市|