如何使用let
或const
声明变量?
例如,可以这样做:
if (variableNotMade) {
var makeVariable
}
但是如何使用let
或const
代替var
来实现这一目标?
类似的帖子here表明可以这样做:
let makeVariable = variableNotMade ? foo : bar
虽然只有else
这种方法才有效
有没有合适的方法来实现这一目标,还是应采取不同的方法?
答案 0 :(得分:1)
In my opinion there is not such thing as an optional declaration. You declare the variable and then the assignment can be optional if you can call it that (better say conditional). Finally check for null.
Also let
const
and var
are different things:
let
has a block scope, const
is read only and block scoped and finally var
has a function scope. There is a lot more involved in using them safely cause hey, it's JS, but that's is the summary.
答案 1 :(得分:1)
你不应该“有条件地创建变量”。您可以有条件地为变量赋值,但不能有条件地创建它。
以此示例为例,假设它可以按预期工作:
if (foo) {
var bar = 'baz';
}
alert(bar);
那么,如果foo
为false
,然后bar
未创建,那么alert(bar)
会引发有关未定义变量的错误?!不,这太疯狂了。
这就是为什么var
声明将被提升并且变量将存在的原因,仅具有undefined
值。这就是let
和const
显式阻止作用域的原因;他们将存在于他们的块中,并且将不会存在于他们的块之外。因此,您永远不会陷入“条件创建的变量”不存在的情况。
你想要的可能是:
let foo;
if (bar) {
foo = 'baz';
}
答案 2 :(得分:0)
如果您不想使用else阻止,则可以执行此操作
让makeVariable = variableNotMade&& foo
但这会将makeVariable设置为false。 所以,如果这不是你特别想要的,你应该使用deceze♦方法。