预期的 ';'而是看到了“,”。 - JSLint 多变量设置

Expected ';' and instead saw ','. - JSLint multivar setting

大约从 2016 年 1 月 14 日起,JSLint 开始抱怨 varlet 声明每个声明有多个变量,并创建了一个新指令,multivar忽略了这个新的 "problem".

这是一个非常重要的变化,因为如果您 在同一个代码块中有两个 var,早期版本会抱怨。

也就是说,截至今天(2016 年 1 月 18 日),此代码现在中断 JSLint

/*jslint white:true, browser:true, devel:true */
function a(b) {
    "use strict";
    var c, d; // <<< Now bad!!
    d = "test";
    c = d + b;
    console.log(c);
}

报告的错误是,Expected ';' and instead saw ','.var c,d;

"correct" 修复显然是这样的:

/*jslint white:true, browser:true, devel:true */
function a(b) {
    "use strict";
    var c;
    var d;  // <<< this *used* to be forbidden.
    d = "test";
    c = d + b;
    console.log(c);
}

请注意,这个新的正确代码会在 earlier versions of JSLint 中产生错误 Error: combine_var

我能找到的关于 Crockford 变化的唯一描述似乎是 this post on Google Plus:

JSLint now has a multivar option that tolerates multiple names being declared in a single var, let, or const statement.

...并在 website instructions...

上快速提及

Tolerate multiple variables declarations per statement
multivar
true if a var, let, or const statement can declare two or more variables in a single statement.

JSLint.com 上的 multivar 更改似乎还没有出现在 GitHub 存储库中。查看 1 月 14 日标题为 "var" 的两个签入 (1, 2)。这两个使 JSLint 中的代码遵循新要求,但不 (afaict) 添加描述的 multivar 指令和在 JSLint.com.

上使用

谁能告诉我为什么现在有多个 var 行 encouraged/required,而不是通常的 "You should ignore JSLint," 答案?也就是说,为什么之前需要一个变量(我想是为了鼓励对提升的理解),为什么这个推理突然变得毫无意义?

来自爱彼迎风格指南。

It's easier to add new variable declarations this way, and you never have to worry about swapping out a ; for a , or introducing punctuation-only diffs. You can also step through each declaration with the debugger, instead of jumping through all of them at once.

更多信息请访问:https://github.com/airbnb/javascript#variables