我认为变量应该不在循环中,因此只定义一次变量。
喜欢
var target;
elementsArray.forEach(function(ele) {
target = $('input[name=' + ele + ']');
// do something with target
});
但是,我阅读了一些JS编码建议,也就是说,变量应该在范围内定义。
那么我应该这样使用吗?
elementsArray.forEach(function(ele) {
var target = $('input[name=' + ele + ']');
// do something with target
});
如果创建多个新实例,则不会花费任何费用?
只有当你在循环之外用它做一些事情时,它才真正重要。
- 在循环外定义
target
意味着在循环执行后,循环命中的最后一个$('input[name=' + ele + ']')
元素仍将分配给target
变量。 - 在循环内定义
target
将意味着target
将在循环外部未定义。
两种
foreach
的行为将有所不同。forEach
为数组中的每个项目创建新的scope
(函数级别)。
对于全局变量,它将覆盖每次迭代的值。对于本地,它将为每个项目创建新实例。
如果在forEach
中处理任何click events
,对于global
变量,当值被覆盖时,它将始终考虑最后一项。
两者不是一回事
它不仅仅是一个循环,它是在循环中调用的函数。
每个函数都有自己的作用域。
在第一个示例中,target 对于包含此 forEach 循环的函数是可见的,在第二个示例中,target 仅在此函数内可见。