2016-09-28 29 views
2

如果我在catch塊中創建一個變量,這個塊級作用域是什麼?試試看有沒有塊級的範圍?

似乎在全球範圍內創建它。

我還以爲是塊級的,因爲不transpilers轉換讓語句的try/catch?

try { 
    throw Error("test"); 
} catch (e) { 
    var x = 15; 
    console.log(x); 
} 

console.log(x); 
+2

沒有,'catch'子句中'var'聲明是在功能範圍。然而,你可以使用'let'(在ES2015中)。 – Pointy

+0

所以在es6之前從來沒有使用塊級變量的黑客?我以爲我看了一個關於它的視頻。 – runners3431

+2

其實有是'趕上()'一個特別的範圍規則 - 在「參數」爲'catch'塊的作用域是該塊,幾乎就像是一個函數參數。 – Pointy

回答

1

如果我在catch塊創建變量,這是塊級範圍?

如果您創建一個塊範圍變量(using let)它是。

似乎在全球範圍內創建它。

您正在使用var,它始終在當前函數的作用域中創建變量(如果不在函數中,則爲全局變量)。