仅在使用var语句的块内为声明的变量赋值有意义吗? 让我们考虑一下 某个变量由javascript函数中的var语句声明; 该变量的值在整个函数中保持不变; 此变量将仅在该函数中的某些块内使用,但不会在大多数块内使用。

仅在使用var语句的块内为声明的变量赋值有意义吗? 让我们考虑一下 某个变量由javascript函数中的var语句声明; 该变量的值在整个函数中保持不变; 此变量将仅在该函数中的某些块内使用,但不会在大多数块内使用。,javascript,Javascript,问题:如果上述都是真的,那么在块外函数声明开始时,最好只给变量赋值一次,还是只在使用变量的那几个块内重复赋值 在下面的示例中,函数声明中有5个块,但变量x仅在其中2个块中使用。但是让我们假设有更多的块,并且只有很少的块涉及变量x 示例1:在该示例中,变量x在函数声明开始时仅赋值一次,位于所有块之外: function foo() { var x; x = 'value'; if (ConditionNotInvolvingX) { // do someth

问题:如果上述都是真的,那么在块外函数声明开始时,最好只给变量赋值一次,还是只在使用变量的那几个块内重复赋值

在下面的示例中,函数声明中有5个块,但变量x仅在其中2个块中使用。但是让我们假设有更多的块,并且只有很少的块涉及变量x

示例1:在该示例中,变量x在函数声明开始时仅赋值一次,位于所有块之外:

function foo() {
    var x;
    x = 'value';
    if (ConditionNotInvolvingX) {
        // do something without using x
    }
    else if (Condition2NotInvolvingX) {
        console.log(x);
    }
    else if (Condition3NotInvolvingX) {
        console.log('""' + x + '""');
    }
    else if (Condition4NotInvolvingX) {
        // do something without using x
    }
    else if (Condition5NotInvolvingX) {
        // do something without using x
    }
}
示例2:在此示例中,变量x的值仅在这两个块内重复赋值,其中需要:

function foo() {
    var x;
    if (ConditionNotInvolvingX) {
        // do something without using x
    }
    else if (Condition2NotInvolvingX) {
        x = 'value';
        console.log(x);
    }
    else if (Condition3NotInvolvingX) {
        x = 'value';
        console.log('""' + x + '""');
    }
    else if (Condition4NotInvolvingX) {
        // do something without using x
    }
    else if (Condition5NotInvolvingX) {
        // do something without using x
    }
}

当然,您可以在任何方便的地方分配它,以便需要访问它的所有函数/块都可以这样做

也就是说:一般来说,使用const比使用var更好-const具有块作用域,使代码更容易理解,不允许相同的重新分配


不过,如果您愿意,您可以尽可能多地编写纯函数,这意味着函数引用的唯一变量直接在该函数的块中,而不是在任何外部范围中。纯函数有时需要更多的思考才能实现,但它们可以使关于更大脚本的推理变得更容易。编写代码时,您是否希望尝试这样做取决于您。

我认为代码行数越少越好,因此应该在顶部指定一次,而不是在使用的每个位置


此外,如果在100个区块中有99个区块使用了该方法,则您不希望在每个区块中分配该方法,因此,您将面临一个问题,即每个区块从一个方法顶部切换到另一个方法顶部的比例到底是多少。如果总是在顶部赋值,就可以避免这个问题。

那么你的问题是什么?一个只声明的变量仍然有未定义的值。在我看来,这就是微纳小人国优化。实际上,这甚至不是优化。只需将变量的值赋给示例1一次,然后忘记它。这样更好吗。。。?关于什么?我不会使用一个变量,它在运行中具有不同的含义,因此,如果在块中使用了不同类型的赋值,则该变量应反映该用途,并且为了澄清,该变量应不止一个。