为什么有时在使用变量之前将 'null' 分配给变量

Why assigning 'null' to a variable before using it, sometimes

以下面的代码片段为例:

//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 abc 之间是否有任何区别,因此与 ab 不同,c 未分配开始时的 null 值,这是否会导致任何潜在的错误,为什么我有时需要在使用它之前将 null 分配给变量

当您不将 null 分配给变量时,您将 "assign" undefined 分配给它。

var a = null;
var b = null;
var c;

console.log(a, b, c) // => null, null, undefined

如果您想了解 nullundefined 之间的区别,您可以阅读 this question 的答案。

如果您好奇为什么人们想要添加 null 而不是 undefined - 可能是有原因的。例如,要通过 undefined 检查代码。此外,有时人们可以分配的不是空值,而是初始值,如 false0'' 等;这是一个类似的动作。

但在您的特定情况下,您可以只使用 var a, b, c; 它会起作用并且不会违反任何规则。

您实际上是在保存全局变量,以便稍后在函数内重新分配。 nullundefined 之间没有真正的区别(除了 null 是一个对象而 undefinedundefined)。

您的变量当前看起来像:

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 并在所需的设置中为其赋值。每当您调用该函数时,都会更新全局范围变量。

希望这现在有意义。