意譯 自呼叫函式表示式

2021-09-23 21:52:04 字數 1644 閱讀 2766

一、寫在前面

本文將一如既往地遵循從自身理解出發,而非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...