【问题标题】:Purpose of assigning var as void 0 in javascript [duplicate]在javascript中将var分配为void 0的目的[重复]
【发布时间】:2017-10-10 03:52:40
【问题描述】:

我正在尝试了解 this article 和其他地方使用的库,其中有一些非常令人费解的东西,其中有一行

var cb = void 0;

我知道void 0 返回undefined,但var 默认不是未定义的吗?为什么不直接使用下面的呢?

var cb;

【问题讨论】:

  • void 0 实际上比 undefined 短,因此它减少了代码长度。
  • 请注意,我不是在问 void 0 是做什么的,而是在这种情况下为什么要明确说明。
  • 我开始认为这段代码可能是代码生成器或转译器的输出,这会让我对为什么它可能不是惯用的 Javascript 感到满意。
  • 是的,抱歉,我的意思是您通常会找到 void 0 而不是 undefined,因为由于它更短,因此转译器会利用它来减少转译代码的长度。

标签: javascript


【解决方案1】:

你是对的。 JavaScript 变量会自动初始化为undefined。因此,鉴于void 0 返回undefined,这两个语句的作用完全相同:

var cb;

var cb = void 0;

嗯...不是完全同样的事情。这是一个会有所作为的案例:

function foo() {
    var cb;
    // some stuff
    cb = 42;
    // a lot more stuff, lots of lines of code here!
    // ... really a lot of code here ...
    // ... so much code that I forgot the first part of the function...
    var cb;  // I forgot that I already defined cb above!
    alert( cb );  // Do I expect undefined? I will be surprised!
}

因此,人们可能会在该函数的第二部分使用var cb = void 0;,以确保cb 不会被意外分配到上面的值。 OTOH,许多 IDE 会在第二个 var 声明中向您发出警告,因此您将自行承担忽略该警告的风险。

在任何情况下,这种重复的变量声明通常是一个写得不好的函数的标志,它做的太多了,应该被分解成更小的函数。

我能想到的其他几个可能的原因来做var cb = void 0;

  1. 明确表示变量被设置为undefined(假设读者知道void 0返回undefined!)。但这不是必需的,因为 JavaScript 自动将变量初始化为 undefined 的定义很明确
  2. 在使用像 C 这样新声明的变量被初始化为随机垃圾的语言后,他们不相信如果他们忽略了赋值,就会发生正确的事情。这也不是必需的,因为 JavaScript 不是 C。

【讨论】:

    【解决方案2】:

    或者也许是为了确保 cb 被初始化为 undefined 而没有别的(未定义在 ES3 中是可写的)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多