javascript函數

 

1、js函數聲明:     
function fun1(arg){  
 alert(arg+",This is my first js function !"); }   
var fun2 = new Function("arg","alert(arg);");  
//儘管可用Function構造函數創建函數,但最好不要使用它,因爲它比第一種傳統方式定義函數要慢得多!   
//不過所有函數都應該看作爲是Function類的實例! fun1("Jesen"); fun2("Jesen");  
2、和java不同,js是無重載的:   
function fun1(arg){  
alert(arg+100); }   
function fun1(arg,arg2){  
alert(arg+10); }   
//第二個fun1將覆蓋第一個的定義,在下面講到的arguments中可以解決重載問題。   
fun1(10);  
3、arguments對象
//arguments對象是傳給函數的參數數組   
function fun1(){ alert(arguments.length); }   
fun1(); fun1(2); fun1(2,3);   
//模擬函數重載   
function fun3(){   
if(arguments.length==1)  
{ alert(arguments[0]+10); }  
else{ alert(arguments[0]+arguments[1]); } }   
fun3(100); fun3(10,20);  
4、閉包
對於閉包,理解的不是很透徹,也請了解的朋友解釋下。
有說函數內部使用全局變量就是一個簡單的閉包的: 
var g_arg = "ok"; function fun1(){ alert(g_arg); }  
fun1();  
也有一種是函數外部調用函數內部變量的閉包:
function a(){ var i=0; function b(){ alert(++i); } return b; }  
var c = a(); c(); c();  
不是很理解javascript中閉包的作用,大家可討論下。
嚴格意義上講任何一個function在執行時就構成一個閉包,閉包的實質是作用域。
普通的function,內部聲明的變量在執行完會全被回收掉,這時閉包也被回收了,所以這種閉包對我們沒有用處,他只是個作用域。
如果一個function的局部變量在執行時被生命週期更長的變量引用,那麼這個function執行完時就不能回收掉這個局部變量,這個局部變量的生命週期超出了他的作用域,這時的作域也不能被回收掉,就形成了典型的閉包。
閉包的作用就是使局部變量擁有更大的生命週期,甚至全局的生命週期,這使得閉包可以保存function執行時的狀態,特別是那種function中又返回一個function時,被返回的function就可以訪問父function執行時的所有局部變量(典型的帶狀態函數)。因爲JS中回收一個變量不是看作用域是否結束,而是看引用數。
5、匿名函數
js實現匿名函數有三種方式:
a、函數字面量:首先聲明一個函數對象,然後執行它。
(function(arg){ alert(arg); } ) (1);  
b、優先表達式:由於Javascript執行表達式是從圓括號裏面到外面,所以可以用圓括號強制執行聲明的函數。
( function(arg){ alert(arg); } (2) );  
c、Void操作符:用void操作符去執行一個沒有用圓括號包圍的一個單獨操作數。
void function(arg){ alert(arg); }(3)  
我們一般通常用第一種方法,在擴展jquery的時候我們也經常會用到這種匿名函數的寫法:  
(function($) { $.fn.pluginName = function() { // Our plugin implementation code goes here. }; })(jQuery);  
上面定義了一個jQuery函數,形參是$,函數定義完成之後,把jQuery這個實參傳遞進去.立即調用執行。這樣的好處是,我們在寫jQuery插件時,也可以使用$這個別名,而不會與prototype引起衝突.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章