js中IIFE(立即執(zhí)行函數(shù)表達式)到底是咋來的?
當前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
介紹IIFE(Immediately Invoked Function Expression),中文名稱:立即執(zhí)行函數(shù)表達式,其實IIFE最早并不叫這個名字,而是叫做 2010年11月5日,Ben Alman寫下來他的著名文章:Immediately-Invoked Function Expression (IIFE),標志著IIFE這個名字的誕生。 在文章中,Ben Alman稱他是一個對待術(shù)語非常嚴謹?shù)娜?,之前他多次看?code style="font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace, sans-serif; padding: 0px 5px; line-height: 1.8; margin: 0px 3px; display: inline-block; overflow-x: auto; vertical-align: middle; border-radius: 3px; background-color: rgb(251, 229, 225); color: rgb(192, 52, 29); border: none !important;">Self-Executing Anonymous Function這個說法,覺得不是很恰當,于是他提出了 IIFE到底是咋來的?當我們定義一個函數(shù)或者一個函數(shù)表達式時,你得到的是一個名字,通過這個名字,你就可以調(diào)用這個函數(shù)。 下面這兩段代碼,第一個定義了一個普通函數(shù),第二個定義了一個函數(shù)表達式,這兩種形式,我們都可以通過標識符
也就是說,當 然而函數(shù)聲明是無法直接調(diào)用的,所以下面的寫法會導致錯誤:
我們來分析一下,上面這段代碼,javascript解釋器會將其解釋為一個函數(shù)聲明,和一個分組操作符( 那我們就給它一個表達式:
這回代碼不報錯了,但是這段代碼毫無意義,這個函數(shù)并沒有執(zhí)行,實際上這段代碼與下面的代碼等價:
它的返回值就是1,這不是我們想要的結(jié)果,我們需要函數(shù)定義后能立即被執(zhí)行,那就需要我們告訴javascript解釋器,這個函數(shù)是一個表達式,而不是一個聲明,因為表達式可以立即執(zhí)行,但是聲明不能。 而在javascript中,生成表達式最簡單的方式就是用
這樣函數(shù)聲明就變成了一個函數(shù)表達式,但是這個表達式?jīng)]有名字,我們沒法調(diào)用它,我們先給它一個名字,然后通過名字調(diào)用它。
這樣完全沒有問題,但是這里的
是等價的,既然
將
IIFE的變種由上面介紹可知,生成IIFE的精髓就是 這個變種利用賦值運算符
下面的表中使用邏輯運算符來生成表達式。
還有下面這些,都是利用一元運算符來生成函數(shù)表達式。
最后來一個不為人知的,
還有使用
這些方式都比較偏門了,不建議使用,只是用來幫助我們理解IIFE的。 為什么Self-Executing Anonymous Function這個名字不好?
Self-Executing:這個名字暗示函數(shù)會調(diào)用自己,但是實際上函數(shù)是立即被執(zhí)行的,而不是調(diào)用它自身。
Anonymous:這個名字暗示函數(shù)是匿名的,但實際上函數(shù)可以有名字,也可以沒有名字,比如下面的例子:
轉(zhuǎn)自https://www.cnblogs.com/graphics/p/18959048 該文章在 2025/7/3 9:12:40 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |