jshint.com中的javascript代码引发警告“在循环中声明的引用外部作用域变量的函数可能会导致语义混乱”

时间:2019-04-28 20:08:17

标签: javascript

javascript代码:

for (j = 0; j < array.length; j ++) {
    if (
        array[j].some(
            function(word) {
                return word.indexOf(array1[i]) > -1;
            }
        )
    ) {
        makeSomething();
    }
}

Functions declared within loops referencing an outer scoped variable may lead to confusing semantics. (array1)中产生jshint.com警告。

实际上可以。

真的有问题吗?

应该怎么写?

3 个答案:

答案 0 :(得分:2)

不,这不是问题。警告缺少原因:

如果回调将被异步回调,那么将会令人困惑:

   for(i = 0; i < 10; i++) {
      setTimeout(function() {
        console.log(i); // guess what this logs
      });
  }

但是您实际上应该始终声明变量,并且为此始终使用letconst

  for (let j = 0; j < array.length; j ++) {

这将使警告消失,并且还将修复上面的示例(并且避免使用probably confusing implicit global)。

答案 1 :(得分:0)

您可以在for范围之外声明该函数,并在避免警告的情况下达到相同的结果。

const functionName = function(word) {
    return word.indexOf(array1[i]) > -1;
}

for (let j = 0; j < array.length; j ++) {

    if (array[j].some(functionName)) {
        makeSomething();
    }
}

答案 2 :(得分:-1)

你只需要在for循环外声明函数,然后在循环内调用它作为guest