仅声明变量有什么用?

时间:2017-01-14 22:02:02

标签: javascript

我已经使用python一段时间了,刚刚开始学习javascript。在javascript中,你可以,据我所知,声明一个变量而不为它赋值(var cheesevar cheese = 4相比)你想在什么情况下声明一个变量但不给它赋值马上去?

3 个答案:

答案 0 :(得分:0)

考虑这个片段。

if (someCondition) {
    var x = 5;
} else if (someOtherCondition) {
    var x = 4;
}

if (x) {
    doFunc();
}

由于x需要存在doFunc,因此您只需在上面添加一个未定义的声明。 var x;以便if (x)不会返回错误。

答案 1 :(得分:0)

如果希望变量的值为undefined,请执行此操作。

var cheese;
console.log(cheese); // undefined

简单
var cheese = undefined;

undefined值似乎不太有用,但这将允许稍后分配一些其他值。

答案 2 :(得分:-1)

var cheese;可能非常有用(即使您从未为其指定任何内容)。当然,输入var cheese = undefined;是一种较短的方式,但这不是唯一的原因......

使用var声明一个局部变量,这有一个很好的属性:它隐藏了父作用域中的变量。

您的问题还有另一部分:

  

如果我们要为var cheese 分配一个值:为什么不立即指定 ?。

答案:您的算法返回cheese而不指定任何内容可能没问题 - 即“undefined有效”。

这是一个示例,说明var如何隐藏父作用域中的变量:

var a = 3;
console.log(a); // prints 3; "a" is defined in this scope

function findEvenNumber(numbers) {
    var a; // we declare this local variable, to ensure that we do _not_ refer to the variable that exists in the parent scope
    numbers.forEach(function(number) {
        if (number % 2 === 0) {
            a = number;
        }
    });
    return a; // if no even number was found, it returns undefined (because we never assigned anything to a)
}
findEvenNumber([1, 2]); // returns 2;

console.log(a); // prints 3; the "a" in this scope did not get overwritten by the function

猜测:ECMA中可能存在var cheese;语法,以使程序员能够在其函数的开头声明所有变量。这样的约定由C89 compiler强制执行,有些人喜欢它。