JSLint警告统一函数中的变量
db.collection('users').doc(docId).set(userData).then(ref => {
console.log(ref)
})
第一行警告:“ ref”在定义前就已使用。
如何解决?
答案 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
指令。db
,docId
和userData
设置为全局变量。;
来结束行。现在我们要解决这个问题:
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提供了更短形式的函数表达式,其中省略了单词
function
和return
:
(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指令,该指令已作为有效指令删除。
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);
});