javascript立即呼叫的函式表示式

2021-09-06 06:00:48 字數 3481 閱讀 9048

1. 什麼是自執行的匿名函式?

它是指形如這樣的函式: (function )();

2. 疑問

為什麼(function )();可以被執行, 而function ();卻會報錯?

3. 分析

(1). 首先, 要清楚兩者的區別:

(function )是表示式, function 是函式宣告.

(2). 其次, js"預編譯"的特點:

js在"預編譯"階段, 會解釋函式宣告, 但卻會忽略表式.

(3). 當js執行到function() ();時, 由於function() 在"預編譯"階段已經被解釋過, js會跳過function(), 試圖去執行();, 故會報錯;

當js執行到(function )();時, 由於(function )是表示式, js會去對它求解得到返回值, 由於返回值是一 個函式, 故而遇到();時, 便會被執行.

另外, 函式轉換為表示式的方法並不一定要靠分組操作符(),我們還可以用void操作符,~操作符,!操作符……

如:

!function()();

佚名函式()()

(())

(function

() )();

(function

(v)

)('hello');

(function

() ());

(function

(v)

('hello'));

有名函式()()

(())

(function

fn()

)();

(function

fn()

());

物件函式()()

物件函式(())

(  

}).init();

(  

}.init());

物件內部()

不可這樣呼叫

var foo =(1)

}; alert(foo.fn);

//'yes'

var foo =(1)

}; alert(foo.fn());

物件+","+函式+()

「物件」可以為如下,自己可試

1, function

() ();

1、任意數字

2、特殊字元(!、~、- 、+)

3、void

4、true、false

當然這些也可以組合使用。

()應用,設計模式之單例模式

自定義物件

//

()應用

var singleton = (function

() };

}return

};})();

/*呼叫公有的方法來獲取例項:

*/singleton.getinstance().publicmethod();

var obj ={};

(function

(q)

} (obj)); //提交obj全域性物件

obj.publish('hello');//

hello

(function

(a)

} (window));

//window物件

publish('hello');

著名應用例項:jquery

設計模式之迭代器模式 

(function

() ;

jquery.fn = jquery.prototype =,

jquery: "1.7.1"};

//合併 init()的屬性為jquery.fn

jquery.fn.init.prototype =jquery.fn;

//返回jquery

return

jquery

})();

//定義jquery全域性物件

window.jquery = window.$ =jquery;

})(window);  

//應用例項

alert($().jquery);//

1.7.1

var fn = (function

() ,

current:

function

() };

} ());

alert(fn.current());

根據引數選擇執行物件

var fn=(function

()(),

i2:function

()()

};//json格式,可以無序排列

var json=;

//array陣列,有序排列

//var ar=["i11","i12"];

return

};})();

alert(fn.init(1));

return ; //為傳進來的物件新增屬性

x.on = c; //為傳進來的物件新增方法

x.dm = g; //為傳進來的物件新增方法

return x

}}

使用閉包:

(function

($) )(jquery);

這是來自jquery官方的外掛程式開發規範要求,使用這種編寫方式有什麼好處呢?

a) 避免全域性依賴。

b) 避免第三方破壞。

c) 相容jquery操作符'$'和'jquery '

我們知道這段**在被解析時會形同如下**:

varjq 

=function

($) ;

jq(jquery);

利用匿名函式繫結事件

var obj = document.getelementbyid("psd");

obj.οnclick=(function()

})()

1.佚名函式

function()

2.分組正則呼叫佚名函式

(function() )();

3.定時呼叫佚名函式

settimeout(function();

}());

5.給佚名函式傳弟引數,等價4

(function( bird ) ;

}( window.bird = window.bird || {} ));

JavaScript 立即執行函式

函式轉為表示式,會被立即執行。再次訪問函式名返回空 下面2個括弧 都會立即執行 function 推薦使用這個 function 但是這個也是可以用的 由於括弧 和js的 異或,逗號等操作符是在函式表示式和函式宣告上消除歧義的 所以一旦解析器知道其中乙個已經是表示式了,其它的也都預設為表示式了 va...

立即呼叫函式(IIFE

定義 iife 立即呼叫的函式表示式,宣告函式的同時立即呼叫這個函式。語法 iife的常用寫法 這兩種寫法的作用相同,只是表現形式不同而已,只是起了自執行的作用 function 把函式當作表示式解析,然後執行解析後的函式 相當於 var a function a a得到的是函式 function ...

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

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