以下面的代码片段为例:
//variable a,b and c will hold Constructors later
var a = null;
var b = null;
var c;
function setup() {
//assign those Constructors to variable a,b and c
a = new ControlsAndInput();
b = new p5.FFT();
c = new myOwnConstructor();
}
我注意到有些人喜欢声明并将null
值赋给一个将在以后使用的全局变量。
问题是:在使用之前,分配null
值与不为变量分配null
值之间的区别是什么?在上面的例子中var a
,b
和c
之间有什么区别,这样与a
和b
不同,c
在开始时没有被赋予null
值,这是否会导致任何潜在的bug,为什么我需要在之前将null
赋值给变量有时使用它
如果你没有将null
分配给变量,你可以“分配”undefined
。
var a = null;
var b = null;
var c;
console.log(a, b, c) // => null, null, undefined
如果你想知道this question和null
之间的差异,你可以阅读undefined
的答案。
如果你很好奇为什么人们想要添加null
而不是undefined
- 可能有原因。例如,要通过undefined
检查代码。此外,有时人们可以分配非空,但初始值,如false
,0
,''
等;这是一个类似的行动。
但在你的特殊情况下,你可以使用var a, b, c;
,它将工作,并没有违反任何规则。
您实际上正在做的是保存全局变量以便稍后在函数内重新分配。 null
和undefined
之间没有真正的区别(除了null
是一个对象而undefined
是undefined
)。
您的变量目前看起来像:
var a = null;
var b = null;
var c;
console.log(a);
console.log(b);
console.log(c);
更简单的方法是在没有值的情况下一次性分配它们:
var a, b, c;
然后你可以按照自己的意愿重新分配所有这些。
这是一个基于意见的问题。在大多数情况下,您将为它们分配未定义的值。在某些情况下,您可以使用null
来检查变量是否未定义。但请注意null is evil。
现在,让我澄清为什么我们需要这样的?
var a; // undefined
function setup() {
a = 10;
}
console.log(a); // a is still undefined
setup();
console.log(a); // a is now 10
因此,您只需在函数范围外定义变量a并在所需的设置中分配其值。无论何时调用该函数,都会更新全局范围变量。
希望现在有意义。