Jshint: loopfunc & let/const

创建于 2017-02-15  ·  7评论  ·  资料来源: jshint/jshint

一些问题(#1301 和 #2225,也许其他)表明这已经解决,但 2.9.4 仍然警告循环中的函数如下:

const a = [], b = [];
for (let i in b) a.push(() => i);
for (let i of b) a.push(() => i);
for (let i = 0; i < 10; i++) a.push(() => i);

let i = 0;
while (i++ < 10) a.push(() => i);

最有用的评论

我将使用@stevenventimiglia的方法,用内联配置包装我的“违规”函数,在我知道我的代码引用合理的地方打开和关闭 loopfunc lenience。

也就是说,我想我会提供一个进一步的例子来强调这条规则的一些差距:

function foo(myLoopArr)
{
    /* globals Promise: false */
    for(let val in myLoopArr)
    {
        const myPromArr = [];
        myPromArr.push(function() {
            return new Promise();
        });
    }
}

上面的函数没有任何用处。 但是,重要的是,循环中的任何值都没有引用循环外的任何变量。 然而 jshint 抛出警告:

 myPromArr.push(function() {
                                ^ Functions declared within loops referencing an outer scoped variable may lead to confusing semantics.

只是想通过指出这个警告可能会在词汇上合理的情况下引起火灾。

所有7条评论

感谢报告! 尽管对您提到的问题发表了评论,但我
找不到在哪里此行为已轻松一个正确的JSHint版本。

另外:您分享的最后一个例子是一个特例,应该
允许:

let i = 0;
while (i++ < 10) a.push(() => i);

i绑定恰好是词法范围的事实实际上并不是
防止错误loopfunc最初实施是为了避免。
此类代码的作者和读者可能希望每个函数都有一个
专用的i绑定,但实际上,它们都共享相同的绑定。 如果有人
能够帮助解决此错误,请不要忘记说明
案件。

另外:您分享的最后一个例子是一个特殊情况,不应该被允许:

你完全正确...我真傻...^__^
关于真正的问题,我们对实现这一点有任何期望吗?

我们目前没有任何期望。 你愿意帮忙吗?

只是对遇到此问题的任何人说:此问题仍然存在于 jshint 2.9.5 中。

它产生的错误代码是 W083。

@overlookmotel - 五年多来一直遇到同样的问题。

我的建议是将/*jshint loopfunc: true */放在 .js 文件的顶部,或者将"loopfunc" : true,.jshintrc设置中。 它并没有真正解决这个问题,但如果它在 5 年多之后仍未得到解决,那么这不是可以或将很快解决的问题。

我将使用@stevenventimiglia的方法,用内联配置包装我的“违规”函数,在我知道我的代码引用合理的地方打开和关闭 loopfunc lenience。

也就是说,我想我会提供一个进一步的例子来强调这条规则的一些差距:

function foo(myLoopArr)
{
    /* globals Promise: false */
    for(let val in myLoopArr)
    {
        const myPromArr = [];
        myPromArr.push(function() {
            return new Promise();
        });
    }
}

上面的函数没有任何用处。 但是,重要的是,循环中的任何值都没有引用循环外的任何变量。 然而 jshint 抛出警告:

 myPromArr.push(function() {
                                ^ Functions declared within loops referencing an outer scoped variable may lead to confusing semantics.

只是想通过指出这个警告可能会在词汇上合理的情况下引起火灾。

@andrew-st-angelo-77media 很好地报道了这一点。 我只是得到完全相同的错误,即使我的函数没有引用任何外部作用域变量。 我希望这会得到照顾。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

jugglinmike picture jugglinmike  ·  6评论

damyanpetev picture damyanpetev  ·  4评论

timdown picture timdown  ·  7评论

Sriram-Ramaswami picture Sriram-Ramaswami  ·  5评论

fbarda picture fbarda  ·  5评论