js匿名函式和具名函式

2021-09-24 20:05:49 字數 1085 閱讀 4983

按照ecmascript標準,函式表示式的樣式如下(opt記號代表的是可選的,也就是可有可無的意思):

functionexpression :

function identifier opt

( formalparameterlist opt )

函式表示式中函式的識別名是可以不需要有的,有名稱的函式表示式,也就是所謂的"具名函式表示式"(named function expressions,nfe),這個函式的識別名,它的作用域是只能在函式的主體(functionbody)內部。原因當然它只是個原本就可有可無的"**"函式名,真正的這函式識別名稱是被賦值的那個變數識別名。

正常情況下,你只能在函式表述式中的主體中使用這個"**函式名",這也是符合標準的規定,如下面的例子:

varf=

function

foo();

typeof foo;

// "undefined"f(

);// "function"

那麼又為何要使用這個"**函式名",不是可有可無的嗎?

因為這個名稱在除錯時,可以明確地在呼叫棧中看到,如果是不加這名稱,也就是"匿名函式表示式"在除錯時是看不准是呼叫什麼的。這使得除錯時多了一些便利,所以它會被用在這個情況下。

但在ie8之前的ie版本,它對待這個"**函式名",可以像一般的函式宣告一樣。因為以ie8來說,它裡面的js引擎並不是現在的標準ecmascript規定,而是jscript 5.8。

ie8並沒有設計這個封閉作用域,來界定出函式表示式的作用域,而且,在ie8中認為這種有"具名函式表示式",相等於函式宣告。而且ie8還會認為這兩個函式(被賦值的變數與這個**名)是兩個不同的函式物件,例如下面的例子:

varf=

function

foo(

)alert

(f === foo)

;//false

以上的資料主要參考named function expressions demystified與function declarations vs. function expressions

js匿名函式

一 函式的宣告及呼叫 1.函式的宣告格式 function 函式名 引數1,引數2,函式的呼叫 1 直接呼叫 函式名 引數1的值,引數2的值,文件注釋 2 事件呼叫 在html標籤中,使用事件名 函式名 2.函式的注意事項 1 函式名必須要符合小駝峰法則,首字母小寫,之後每隔單詞首字母大寫 2 函式...

js匿名函式

js中定義函式的方式有多種,函式直接量就是其中一種。如var fun function 這裡function如果不賦值給fun那麼它就是乙個匿名函式。好,看看匿名函式的如何被呼叫。1 執行後得到返回值的函式呼叫 js 方式1,呼叫函式,得到返回值。強制運算子使函式呼叫執行 function x,y ...

js匿名函式

匿名函式的宣告和使用 1.宣告乙個匿名函式,直接賦值給某乙個事件 window.onload function 2.使用匿名函式表示式。將匿名函式,賦值給乙個變數。var func function func 注意 使用匿名函式表示式時,函式的呼叫語句,必須放在函式宣告語句之後!3.自執行函式 三種...