一、寫在前面
本文將一如既往地遵循從自身理解出發,而非100%按原文逐句翻譯的方式進行「偽翻譯」,若有謬誤請各位指正,謝謝!!
二、介紹
iife(the immediately invoked function expression):定義函式的同時並執行該函式。
三、常見的使用方式
!function(){}(); // 返回 true
~function(){}(); // 返回 -1
+function(){}(); // 返回nan
-function(){}(); // 返回nan
void function(){}(); // 返回undefined
四、本文要討論的使用方式
1. 方式一
(function())();
(function()());
五、兩種使用方式的區別
讓我們通過下面這個缺少分號(;)的例子來初探它們的區別吧!
方式一的示例:
(function())()(function())();
/* * 返回 module1
* 然後拋typeerror: undefined is not a function異常
*/
方式二的示例:
(function()())(function()());
/* * 返回 module1
* 返回 module2
* 最後丟擲typeerror: undefined is not a function異常
*/
六、解構現象理解本質
首先要牢記一條規則:括號會馬上執行其前面的表示式。下面讓我們逐步分解這兩個示例,好好理解一下吧!
方式一的示例分解:
1. 第一步先執行 (function())() ,返回的結果是 undefined ,最後剩下將被執行的**是 undefined(function())(); ;
2. 第二步根據括號會馬上執行其前面的表示式這一規則,將執行 undefined(function()) ,很明顯undefined不是有效函式,這樣的呼叫方式必須拋異常的。
方式二的示例分解:
1. 第一步先執行 function()() ,返回結果是 (undefined) ,再經過括號運算子得到 undefined ,最後剩下將被執行的**是 undefined(function()()); ;
2. 第二步將執行function()() ,返回結果是 undefined ,最後剩下將被執行的**是 undefined(undefined); ;
3. 第三步當然是拋異常了!
七、提倡的使用方式
想避免因少寫乙個分號造成不必要的困擾,那麼就像下面的那樣寫吧!
;(function()());
意譯 自呼叫函式表示式
一 寫在前面 本文將一如既往地遵循從自身理解出發,而非100 按原文逐句翻譯的方式進行 偽翻譯 若有謬誤請各位指正,謝謝!二 介紹 iife the immediately invoked function expression 定義函式的同時並執行該函式。三 常見的使用方式 function 返回...
函式表示式
函式定義有以下兩種方式 一種是函式宣告,一種是函式表示式。函式宣告 在執行 之前會先讀取函式宣告,即函式宣告提公升。函式表示式 常用語法形式是常規的變數賦值語句,即建立乙個匿名函式並賦值給乙個變數。函式表示式在使用之前必須賦值,否則會出錯,這點與函式宣告提公升不同。能夠將匿名函式作為其他函式的值進行...
函式表示式
定義函式的方式有兩種 一種是函式宣告,另一種是函式表示式 函式宣告語法格式如下 function functionname arg0,arg1,arg2 關於函式宣告,有乙個重要的特徵就是函式宣告提公升,意思是在執行 之前會先讀取函式宣告 函式表示式語法格式如下 var functionname f...