函式表示式

2021-08-28 14:53:58 字數 896 閱讀 1561

函式定義有以下兩種方式:一種是函式宣告,一種是函式表示式。

函式宣告:在執行**之前會先讀取函式宣告,即函式宣告提公升。

函式表示式:

常用語法形式是常規的變數賦值語句,即建立乙個匿名函式並賦值給乙個變數。

函式表示式在使用之前必須賦值,否則會出錯,這點與函式宣告提公升不同。

能夠將匿名函式作為其他函式的值進行返回。

function factorial(num) else 

}

在遞迴函式中用函式名呼叫自身。當將函式引用賦值給別的變數而銷毀原始的函式引用時,呼叫別的變數去執行函式,由於原始引用已不存在就會導致錯誤。

使用arguments.callee

該方法可以解決上述問題,但嚴格模式下禁止使用arguments.callee。

使用命名函式表示式
var factorial = (function f(num)else 

})

命名函式表示式

1.解釋:

可以像函式宣告一樣為函式表示式起乙個名字。

命名函式表示式的識別符號只在函式的區域性作用域中有效。命名函式表示式建立時,會建立乙個特殊的物件,該物件中儲存中函式標誌符和那個函式的鍵值對,這個物件會被注入到當前作用域鏈的前端。然後,被「擴充套件」的作用域鏈又被用於初始化函式。

2.作用:

·可以在除錯的呼叫棧中清晰的看到函式呼叫過程;

·可以在遞迴函式中使用(同上);

3.問題:

·ie8會將函式表示式的標誌符暴露在外部作用域而引發其他的問題(ie9貌似已修復);

部分參考至:

函式表示式

定義函式的方式有兩種 一種是函式宣告,另一種是函式表示式 函式宣告語法格式如下 function functionname arg0,arg1,arg2 關於函式宣告,有乙個重要的特徵就是函式宣告提公升,意思是在執行 之前會先讀取函式宣告 函式表示式語法格式如下 var functionname f...

函式表示式

函式表示式在使用前必須先賦值。函式表示式,使用前必須先賦值var functionname function arg0,arg1 匿名函式或拉姆達函式 arguments.callee 是乙個指向正在執行的函式的指標,因此可以用它來實現對函式 的遞迴呼叫,function factorial num...

JS函式表示式

1.遞迴 function digui num else var d digui digui null d 3 改進 用arguments.callee num 1 代替 digui num 1 arguments.callee 是指向引數所在的函式的指標,code如下 function digui...