我試圖讓我的頭繞着範圍界定。根據我的理解,ES5不具備阻塞範圍的能力,因此,內部f()應該位於身體測試的範圍內。在JavaScript和內部函數中使用塊範圍
這些是從運行功能
- 測試(真)的結果; // [ 「本地」, 「本地」]
- 測試(假)// f不是定義
不過,我不明白爲什麼測試(假)給出了一個錯誤?我期待 - [本地]。
function f() { return "global"; }
function test(x) {
var result = [];
if (x) {
function f() { return "local"; } // block-local
result.push(f());
}
result.push(f());
return result;
}
[非常相似的問題。](http://stackoverflow.com/q/10069204/417562) – lonesomeday
哈!如果您在Chrome 54中使用「嚴格」模式,則結果爲[「本地」,「全局」],[「全局」]。所以它似乎通過在'if'中創建範圍來修復事情。我認爲這不應該被允許,因此不一致的結果。否則,這是瀏覽器中的一個錯誤,因爲根據我的理解,函數應該在整個函數中可用,並且不受'if'影響。 –