[英]Function Declarations Within Blocks according to the Google JavaScript style guide
根據Google JavaScript樣式指南,函數聲明不應在塊中聲明,因為它不是ECMAScript的一部分。 但是,我並不完全清楚什么算作塊。
具體來說,我有一個構造函數,我想在該構造函數的范圍內定義一個函數。 這是否算作一個塊內的函數,因為它在一組{}內? 如果是這樣,這是否意味着每個函數聲明必須是全局的?
一些好的衡量標准:
function Constructor() {
function Shout () { alert('THE BEST UX IS IN ALL CAPS.'); }
}
function Constructor() {
var Shout = function () { alert('THE BEST UX IS IN ALL CAPS.'); };
}
功能不是塊。 一個塊(例如)跟隨一段while
, for
或if
。
首先,要了解函數聲明( function foo() {}
)被提升到其包含函數范圍的頂部(即,您可以通過名稱在與聲明相同的范圍內的任何位置訪問聲明的函數):
foo();
function foo() { }
這個無序代碼是100%合法的,因為foo
的聲明被提升到foo()
調用之上。 但是,現在想象你有條件聲明:
if(false) {
function foo() { }
}
從語言設計的角度來看,應該foo
被吊起? 程序流程永遠不會進入程序段,但我們通常會提升所有聲明。 由於這種混淆,塊內的聲明不是ECMAScript規范定義的語法的一部分(盡管每個實現都支持這種語法,但在每個實現中會產生不同的非標准效果)。
在另一個函數中使用函數不會帶來這種混淆:
function bar() {
function foo() { }
}
很明顯, foo
將被提升到bar
的頂部(無論何時運行)。
因此,你的第一個例子非常好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.