嗨,我是Javascript新手,我正在閱讀Oreilly的Javascript權威指南。在聲明語句段,它說:函數聲明是否不能出現在條件語句中?
我做了一個簡單的測試:
var a = 1;
while(a < 5){
a++;
function double(a){return a * 2 };
console.log(double(a));
}
看來Node.js的不給我任何錯誤和運行預期。對此有何評論?
嗨,我是Javascript新手,我正在閱讀Oreilly的Javascript權威指南。在聲明語句段,它說:函數聲明是否不能出現在條件語句中?
我做了一個簡單的測試:
var a = 1;
while(a < 5){
a++;
function double(a){return a * 2 };
console.log(double(a));
}
看來Node.js的不給我任何錯誤和運行預期。對此有何評論?
這是不正確的。但是,你應該記住,他們可能不像你所期望的那樣行事。
舉例來說,這將工作:
if(false) {
function double(a) {return a*2;};
}
else {
console.log(double(4));
}
即使你可能會認爲這是從來沒有定義功能,由於是一個if
永遠達不到裏面的功能其實是在提升到的頂部當前的「塊」(無論是包含功能還是整個<script>
標籤或文件),因此可以在任何地方訪問。
你不應該把function
定義在if
塊內,但沒有理由不能。
有很多理由你不應該 - 1.規範說不要,2.在某些瀏覽器上,它不起作用! – Alnitak 2013-03-02 00:21:53
@Alnitak我特別說你不應該。但根據吊裝規格,它與'var'完全相同。 – 2013-03-02 00:22:34
根據規格無效,因此說明書中關於「提升」*(規範中未使用的術語)*描述的內容不適用。這些實現可能允許它,並且可能會將它的提升視爲相同,但它仍然無效。 – 2013-03-02 00:42:06
以嚴格模式運行它,你會得到你的錯誤。這是無效的語法*(除非Mozilla的JS實現允許類似的語法)*,但歷史上已被實現許可。 – 2013-03-02 00:04:02