JSLint:在匿名函数中定义之前使用

时间:2019-08-08 14:10:39

标签: javascript node.js jslint

JSLint警告统一函数中的变量

db.collection('users').doc(docId).set(userData).then(ref => {
   console.log(ref)
})

第一行警告:“ ref”在定义前就已使用。

如何解决?

1 个答案:

答案 0 :(得分:0)

我知道我参加聚会有点晚了,但是快速版本是...

嗯,快速版本是我认为您使用的是JSLint的过时版本。

但是,如果您对其进行更新或转到jslint.com,则然后是快速版本...

JSLint不喜欢将=>格式用于函数,除非在非常特定情况下:您将立即返回一些东西。

抹除屁屁(箭头功能)

此版本的代码几乎短毛:

/*jslint single */
/*global db, docId, userData */
db.collection('users').doc(docId).set(userData).then(ref => {
   console.log(ref);
});
  • 使用单引号需要使用single jslint指令。
  • 出于上下文考虑,我将dbdocIduserData设置为全局变量。
  • 需要一些;来结束行。

放屁错误

现在我们要解决这个问题:

Wrap the parameter in parens.
db.collection('users').doc(docId).set(userData).then(ref => {

但是这样做可能会使您感到困惑,因为您会遇到另一个错误:

/*jslint single */
/*global db, docId, userData */
db.collection('users').doc(docId).set(userData).then((ref) => {
   console.log(ref);
});

Expected 'function' and instead saw '=>'.
db.collection('users').doc(docId).set(userData).then((ref) => {

为什么是这种方式...

当我们阅读from JSLint's instructions时:

最后,ES6提供了更短形式的函数表达式,其中省略了单词functionreturn

(parameters) => expression

JSLint要求参数周围有括号,并禁止在{放屁后插入=>左括号,以避免语法歧义。

不允许曲折! JSLint要求您只有一行返回内容。 ({似乎意味着您要返回一个对象文字,这会造成混淆–是对象文字还是多行函数体?因此JSLint不允许在{全部。)

现在,您实际上并没有返回任何内容,但是console.log将立即返回undefined,因此JSLint将允许它。你骗了它。

/*jslint single, browser */
/*global db, docId, userData, console */
db.collection('users').doc(docId).set(userData).then((ref) => console.log(ref));

成功。虽然是邪恶的成功。

顺便说一句,这意味着ref很好。

您可能看到的错误原因是b / c您的旧版本JSLint根本没有es6的概念。或者,如果这样做了,它已经足够古老,可以要求您使用es6 jslint指令,该指令已作为有效指令删除。

但是JSLint在您的情况下真正想要的是function

但是如果您有两个 console.log调用,则不会。

/*jslint single, browser */
/*global db, docId, userData, console */
db.collection('users').doc(docId).set(userData).then((ref) => {
  console.log(ref); 
  console.log(ref + "another");
});

Expected 'function' and instead saw '=>'.

JSLint真正想要的(以及在特定情况下避免的情况仅在屁屁中只有一条线 )是这个...

/*jslint single, browser */
/*global db, docId, userData, console */
db.collection('users').doc(docId).set(userData).then(function (ref) {
    console.log(ref);
});
相关问题