JavaScript 立即執行函式

2021-08-21 09:36:50 字數 1872 閱讀 8664

函式轉為表示式,會被立即執行。再次訪問函式名返回空

// 下面2個括弧()都會立即執行

(function () ()); // 推薦使用這個

(function () )(); // 但是這個也是可以用的

// 由於括弧()和js的&&,異或,逗號等操作符是在函式表示式和函式宣告上消除歧義的

// 所以一旦解析器知道其中乙個已經是表示式了,其它的也都預設為表示式了

var i = function () ();

true && function () ();

0, function () ();

// 如果你不在意返回值,或者不怕難以閱讀

// 你甚至可以在function前面加一元操作符號

!function () ();

~function () ();

-function () ();

+function () ();

// 還有乙個情況,使用new關鍵字,也可以用,但不確定它的效率

// new function ()

new function () () // 如果需要傳遞引數,只需要加上括弧()

// 這是乙個自執行的函式,函式內部執行自身,遞迴

function foo()

// 這是乙個自執行的匿名函式,因為沒有標示名稱

// 必須使用arguments.callee屬性來執行自己

var foo = function () ;

// 這可能也是乙個自執行的匿名函式,僅僅是foo標示名稱引用它自身

// 如果你將foo改變成其它的,你將得到乙個used-to-self-execute匿名函式

var foo = function () ;

// 有些人叫這個是自執行的匿名函式(即便它不是),因為它沒有呼叫自身,它只是立即執行而已。

(function () ());

// 為函式表示式新增乙個標示名稱,可以方便debug

// 但一定命名了,這個函式就不再是匿名的了

(function foo() ());

// 立即呼叫的函式表示式(iife)也可以自執行,不過可能不常用罷了

(function () ());

(function foo() ());

// 另外,下面的**在黑莓5裡執行會出錯,因為在乙個命名的函式表示式裡,他的名稱是undefined

// 呵呵,奇怪

(function foo() ());

有趣的是,即便你為上面那個錯誤的**加上乙個名字,他也會提示語法錯誤,只不過和上面的原因不一樣。在乙個表示式後面加上括號(),該表示式會立即執行,但是在乙個語句後面加上括號(),是完全不一樣的意思,他的只是分組操作符。

// 下面這個function在語法上是沒問題的,但是依然只是乙個語句

// 加上括號()以後依然會報錯,因為分組操作符需要包含表示式

function foo()(); // syntaxerror: unexpected token )

// 但是如果你在括弧()裡傳入乙個表示式,將不會有異常丟擲

// 但是foo函式依然不會執行

function foo()( 1 );

// 因為它完全等價於下面這個**,乙個function宣告後面,又宣告了乙個毫無關係的表示式:

function foo()

( 1 );

Javascript之立即執行函式和逗號操作符

定義 此類函式沒有宣告,在一次執行過後即釋放。適合做初始化工作。function 只有表示式才能被執行符號執行 function test 錯,函式宣告不能被執行 function test 可以執行 function test a,b,c 1,2,3 既不報錯也不執行,會被理解成function ...

function前加運算子實現立即執行函式

我們知道函式的呼叫方式通常是functionname 但如果我們嘗試為乙個 定義函式 末尾加上 解析器是無法理解的。function msg 解析器是無法理解的定義函式的呼叫方式應該是 msg 想讓函式立即執行可以將函式體部分用 包裹起來。這是因為,使用括號包裹定義函式體,解析器將會以函式表示式的方...

立即執行函式

函式宣告 函式表示式 匿名函式 函式宣告 function fnname 使用function關鍵字宣告乙個函式,再指定乙個函式名,叫函式宣告。函式表示式 var fnname function 使用function關鍵字宣告乙個函式,但未給函式命名,最後將匿名函式賦予乙個變數,叫函式表示式,這是最...