我已经使用python一段时间了,刚刚开始学习javascript。在javascript中,你可以,据我所知,声明一个变量而不为它赋值(var cheese
与var cheese = 4
相比)你想在什么情况下声明一个变量但不给它赋值马上去?
答案 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强制执行,有些人喜欢它。