簡體   English   中英

根據Google JavaScript樣式指南在Blocks中的函數聲明

[英]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.'); };
}

功能不是塊。 一個塊(例如)跟隨一段whileforif

首先,要了解函數聲明( 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM