2016-05-11 101 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