考慮兩種風格的JavaScript函數聲明(出四,我認爲):混合javascript函數聲明上的樣式
function foo() {
// ...
}
與
var foo = function() {
// ...
}
在許多情況下,這些行爲將是相同的,和我我認爲我主要的區別在於例如這些所謂的問題:
difference-between-var-foo-function-and-function-foo
usual-functions-vs-function-variables-in-javascript
這都有答案鏈接到這個非常有用的解釋:
javascript-function-declaration-ambiguity
但我想這兩種風格在一個聲明中結合;一個短/可微型局部變量名稱(因爲我經常需要參考它)和一個描述性名稱(我想從.name
中得到一些友好的東西)。
這是我困惑的地方。這是因爲如果立即將該函數分配給一個變量的法案留給它以自己的名義未定義:
var f = function foo() {
// ...
};
console.log(f.name); // "foo"
console.log(foo.name); // !? error: foo is not defined ?!
因此,要獲得這樣一個問題:爲什麼這不是工作?或者,更可能的是,我仍然可能會誤解這兩種聲明風格?
注意的是,以下的不不將導致錯誤:
var f = foo;
function foo() {
// ...
}
console.log(f.name); // "foo"
console.log(foo.name); // "foo"
如何,究竟是有何不同?
PS:我覺得這是這個SO問題不同:
in-javascript-what-is-the-motivation-or-advantage-of-using-var-foo-function-f...
這是我的困境,其中變量名和函數名是相同的特殊情況,即
var foo = function foo() {
// ...
};
那很快,謝謝!那麼你是說,當一個函數的「適當」名稱的範圍在賦值中作爲右值而不是作爲單獨的語句出現時(請參閱下面的錯誤代碼) –
這是函數表達式和一個函數聲明。 – Barmar
根據規範,它對封閉範圍有不同的影響。你的鏈接中的答案是有幫助的,再次感謝......我應該更廣泛地搜索。 –