2016-05-11 42 views
1

在項目中,我有以下行:錯誤:「讓」的聲明只能在一個塊中聲明

if (text.length > 0) { 
    let data = "Some value"; 
} 

因爲在if裏面只有一條語句,我想去掉括號({ }) 。我的代碼則看起來會是這樣的:

if (text.length > 0) 
    let data = "Some value"; 

不過,我得到了以下錯誤:

'let' declarations can only be declared inside a block.

if每隔單個語句工作正常,無支架。爲什麼我會得到這個錯誤?

+1

你想用什麼原因讓?在這個if語句之外它將不可見。 – jkordas

+0

@Andrey這個答案太過於技術性和含糊不清,如果有的話,應該被標記爲這個問題的代名詞。 – SeinopSys

回答

1

let聲明的變量的範圍是它們的定義塊,因此需要用括號來定義範圍。 您可以使用讓來建立的作用域只是一個表達式變量:

var a = 5; 
let(a = 6) console.log(a); // 6 
console.log(a); // 5 

注:讓表達讓利塊是非標準讓擴展和他們的支持已被刪除。

+0

'let(a = 6)console.log(a)'這是無效的JavaScript語法。 – Ginden

+0

你的意思是這是一個非標準但有效的 – Konst

+0

它不是。有關更多信息,請參見[MDN非標準let擴展 - > let表達式](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#let_expressions) - 提供了此語法但是它已經從規格中刪除了。 – Ginden

2

因爲'讓'聲明只能在塊內聲明。

實際上,這樣的代碼是無用的,因爲letconst是塊範圍的。

if (foo) { 
    let bar = true; 
} 
bar // bar doesn't exist here; 

所以,即使你會合法,它也不會工作 - 所以它是禁止的。

+0

變量不會無用的情況:'let server = app.listen(() => console.log(server.address()))'。是的,這是有效的(直到你試圖用單行'if'來使用它)。 – Inkling