在if语句中定义JavaScript变量

luk*_*hek 42 javascript variables if-statement

在if语句中定义JavaScript变量是否正确?

if(a==1){
    var b = 1;
} else {
    var b = 0;
}
Run Code Online (Sandbox Code Playgroud)

我知道上面的代码可行,但是,WebMatrix强调了变量.

我应该在if语句之外定义变量吗?或者第一个选项是正确的?或者它真的没关系?

var b = '';
if(a==1){
    b = 1;
} else {
    b = 0;
}
Run Code Online (Sandbox Code Playgroud)

jAn*_*ndy 57

作为ES2017规范(2017年7月8日)正式发布的,EcmaScript的支持真正块的范围现在使用letconst关键字.


由于ECMAscript没有块范围但没有函数范围,因此在函数上下文中声明任何变量是一个非常好的主意.

即使您可以在函数上下文中的任何位置进行变量和函数声明,但如果您不完全了解后果,则会产生一些奇怪的问题.

头痛的例子:

var foo = 10;

function myfunc() {
    if (foo > 0) {
        var foo = 0;
        alert('foo was greater than 0');
    } else {
        alert('wut?');
    }
}
Run Code Online (Sandbox Code Playgroud)

猜猜看,我们得到了什么?在myfunc这里打电话时提醒 这是因为ECMAscript解释器会自动将任何语句和函数声明提升到上下文的顶部.基本上,在第一次之前初始化.varfooundefinedif statement

进一步阅读:JavaScript范围和提升

  • 那么,如果您不想全局重新定义变量并且确实想根据通过 if 语句的路径来更改变量,那么这里的解决方案是什么?创建对象并重新定义对象属性是唯一的解决方案吗? (3认同)