2016-07-24 48 views
1

所以讓我們有一些非常整潔的範圍規則。作爲從MDN一個例子:我們是否應該使用濫用相同的變量與let,因爲我們可以?

function letTest() { 
    let x = 1; 
    if (true) { 
    let x = 2; // different variable 
    console.log(x); // 2 
    } 
    console.log(x); // 1 
} 

豈不是混淆重新聲明相同的變量名if區塊內,或者也許這只是一個壞榜樣指出的let作用域規則?

爲什麼我們應該重新聲明變量名稱是否有很好的理由?

回答

2

它不會令人困惑,因爲塊會提示每個塊範圍的變量都屬於此塊。對於ES6感知的開發人員來說,這不應該比在函數範圍內使用局部變量更令人困惑。

上面的代碼混淆不是因爲x被重新聲明,但由於代碼不自我記錄,x變量是多餘的,它的名字並沒有告訴我們對正在發生的事情,兩次

ES5 IIFE

var result; 
... 
(() => { 
    var filteredResult = result.filter(...); 
    ... 
})(); 

和ES6塊

let result; 
... 
{ 
    const filteredResult = result.filter(...); 
    ... 
} 

都在同一條船上,服務於相同的目的,他們都將無法獲得來自可變陰影東西。

一個常見的情況下重複使用的變量名是一個功能參數,並且需要能夠訪問原始變量值,也:

(result) => { 
    result = result.filter(...); 
} 

在另一方面,具有在同級嵌段的嵌段作用域變量可以有更多的實際意義比在嵌套塊讓他們:

if (foo) { 
    const request = 'foo'; 
    ... 
} 
if (bar) { 
    const request = 'bar'; 
    ... 
} 

兩人都在他們的塊作用域變量完全控制,一個ReferenceError如果將變量賦值一個錯誤失蹤被拋出。

+0

非常好的答案,謝謝 – nus

相關問題