【问题标题】:Sonar rule: Functions should not be defined inside loops [duplicate]声纳规则:不应在循环内定义函数[重复]
【发布时间】:2019-01-28 19:52:45
【问题描述】:

在循环内定义函数可能会产生意想不到的结果,因为在幕后,只定义了函数的单个实例。循环迭代不是创建新的函数实例,而是简单地更新函数的变量。相反,应该返回该函数。

不合规代码示例

var funs = [];
for (var i = 0; i < 13; i++) {
  funs[i] = function() { // Non-Compliant
    return i;
  };
}
print(funs[0]()); // 13 instead of 0
print(funs[1]()); // 13 instead of 1
print(funs[2]()); // 13 instead of 2
print(funs[3]()); // 13 instead of 3

...

我一直在思考,但无法找出合规的解决方案。应该是什么?

【问题讨论】:

  • "只定义了一个函数实例" - 这不是真的......输出错误/因为它是因为用 @ 定义的变量的范围987654322@

标签: javascript function loops sonarqube


【解决方案1】:

使用局部变量就可以了。

var funs = [];
for (var i = 0; i < 13; i++) {
  let localIndex = i;
  funs[i] = function() { // Non-Compliant
    return localIndex;
  };
}
print(funs[0]()); // 0
print(funs[1]()); // 1
print(funs[2]()); // 2
print(funs[3]()); // 3

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 2016-05-26
    相关资源
    最近更新 更多