2016-01-17 15 views
3

在C++中,你可以做ES6塊範圍的變量定義,條件

if (MyClass* obj = MyClass::getInstance()) { ... } 

在JavaScript中,只有功能範圍的變量,因此下面的語句是沒有意義的

if (var x = getTrueOrFalseValue()) { ... } 

但ES6引入了letconst關鍵字,它們聲明只能在塊範圍內訪問的變量。爲什麼你不允許在if/while條件下使用它?例如:

if (let x = getTrueOrFalseValue()) { ... } 

我覺得這很酷,因爲它不會破壞功能範圍未使用的變量,並允許只在當使用它們/而塊範圍。

+1

這是你有回答的問題之一:這是一個設計選擇。 – CoderPi

+0

你最好問這個[TC39](http://www.ecma-international.org/memento/TC39.htm)。 – Teemu

+2

['let(x = get ...()){} blocks](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#let_blocks)無用。 – Bergi

回答

2

我認爲這是不可能的,因爲let只能用作聲明而不是表達式。如果你嘗試(讓f = 3);你也會得到一個錯誤。

0

這是最接近可以得到,這裏

function getTrueOrFalseValue() { 
    return true 
} 

if (!(x = void 0)) { 
    let x = getTrueOrFalseValue(); 
    if (x) { 
    console.log(x) 
    } 
} 

function getTrueOrFalseValue() { 
    return true 
} 
if (!(this["x"]) || !(x)) { 
    let x = getTrueOrFalseValue(); 
    if (x) { 
    console.log(x) 
    } 
} 
+0

jsfiddle https://jsfiddle.net/w0dptr37/ https://jsfiddle.net/w0dptr37/1/ – guest271314

+1

這些都會在真實的ES6中拋出異常 – Bergi

+0

如果你想要一個塊,爲什麼不使用塊而不是一個無意義的if語句? – Bergi