var a = function(){return true;}
var a = function abc(){return true;}
誰能給我解釋一下這兩者之間的區別是?兩個不同的匿名函數聲明之間的區別?
var a = function(){return true;}
var a = function abc(){return true;}
誰能給我解釋一下這兩者之間的區別是?兩個不同的匿名函數聲明之間的區別?
的這裏不同的是,這裏
var a = function abc(){return true;}
您命名一個匿名函數。該名稱abc
僅適用於該功能的內部範圍。
UPDATE
儘管一些實現不尊重該公約......不要指望IE8與它的工作這是真的......
至少,它應該是這樣......一些實現搞砸然而:( – Cu3PO42
第二個功能是命名函數表達式。它對於遞歸可能是有用的,例如
// named
var a = function abc(v) { console.log(v); return v>1 && abc(v-1) || v;}
// ^name abc is known
,b = a
a(3); //=> 3,2,1
b(4); //=> 4,3,2,1
a = function (v) {console.log('value = '+ v);};
b(3); //=> 3,2,1
// versus
var a = function (v) { console.log(v); return v>1 && a(v-1) || v;}
// ^using a here
,b = a
a(3); //=> 3,2,1
b(4); //=> 4,3,2,1
a = function (v) {console.log('value = '+ v);};
b(3); //=> 'value = 3'
注意,使用命名函數表達式是沒有必要的遞歸 - 因爲'了'是在內部功能的範圍內都有效,你可以在你的例子中做'a(v-1)'。 – OverlappingElvis
@OverlappingElvis:但請注意,這與函數的不同引用一起工作,在本例中爲'b'引用。即使原來的'a'引用被覆蓋,這種技術仍然可以繼續工作,而如果你在'a'上再次出現問題,它會崩潰。 –
@ScottSauyet謝謝,我想解釋它,但你更快。 – KooiInc
的你的例子都只是函數表達式 - 也就是說,你要指定一個表達式(這恰好是一個函數)給一個變量。區別在於一個是匿名的,另一個是所謂的「命名函數表達式」。 http://kangax.github.io/nfe/對函數聲明,表達式和命名錶達式之間的區別有很好的概述。簡短的版本:
只需添加到您的答案中,我發現對於較大的項目,爲調試目的命名該函數(第二行)很方便(如果出現錯誤,Chrome控制檯將顯示名稱),但隨後會有一個縮小器/清理工通過並去除生產版本的名稱。 – samanime
好點 - 通過刪除函數名稱在縮小時不應該丟失任何東西。 – OverlappingElvis
的可能重複的[VAR functionName =函數(){} VS功能使用functionName(){}](HTTP://計算器.COM /問題/ 33 6859/var-functionname-function-vs-function-functionname) – matth
這些函數中只有一個是匿名的。另一個是名爲**的函數,稱爲'abc'。 – pete
這是*不*這個問題的副本(雖然我相信這是一個重複的),如*的*兩者的形式這裏有'FunctionExpressions' - 一個只是有一個名字。 – user2864740