【发布时间】: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