if/else 語句中的函數宣告
當if/else 語句中遇到函數宣告時,它們的處理可能會根據JavaScript 的不同而有所不同環境。在提供的程式碼片段中,函數聲明在每個if/else 分支內定義:
var abc = ''; if (1 === 0) { function a() { abc = 7; } } else if ('a' === 'a') { function a() { abc = 19; } } else if ('foo' === 'bar') { function a() { abc = 'foo'; } } a(); document.write(abc); // Expected output: foo
在ECMAScript 5 (ES5) 下,在非嚴格模式下,上述程式碼表現出不可預測的行為。不同的瀏覽器和引擎對區塊內函數聲明的處理方式不同。
但是,在 ECMAScript 2015 (ES2015) 及更高版本中,區塊內允許函數宣告。此類區塊內的函數聲明的作用域為該區塊。在程式碼片段中,函數 a 在最裡面的 if 區塊中宣告。因此,它在全域範圍內是未定義的,從而導致未定義函數錯誤:
if ('foo' === 'bar') { function a() { abc = 'foo'; } } a(); // Error: a is not defined
對於條件函數定義,建議使用函數表達式而不是聲明:
var a = 'foo' === 'bar' ? function() { abc = 'foo'; } : function() { abc = 19; }; a(); document.write(abc); // Expected output: 19
以上是JavaScript 中的 if/else 語句中的函數宣告如何表現?的詳細內容。更多資訊請關注PHP中文網其他相關文章!