我使用python已经有一段时间了,并且刚刚开始学习javascript。在javascript中,正如我所理解的那样,您可以声明一个变量而不给它赋值(var cheese与var cheese = 4相比),在什么情况下您想声明一个变量,而不是马上给它赋值呢?
发布于 2017-01-14 22:07:49
考虑一下这个片段。
if (someCondition) {
var x = 5;
} else if (someOtherCondition) {
var x = 4;
}
if (x) {
doFunc();
}由于x需要存在才能运行doFunc,因此只需添加上面未定义的声明即可。var x;,这样if (x)就不会返回错误。
发布于 2017-01-14 22:27:31
当您希望变量的值是undefined时,就会这样做。
var cheese;
console.log(cheese); // undefined
它比
var cheese = undefined;undefined值似乎不太有用,但这将允许稍后分配一些其他值。
发布于 2017-01-14 23:52:32
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推测:可能var cheese;语法存在于ECMA中,以使程序员能够在函数开始时声明所有变量。这样一项公约是由C89 compiler执行的,有些人开始喜欢它。
https://stackoverflow.com/questions/41655445
复制相似问题