在循环作用域中定义变量或应超出作用域

define variable in loop scope or should be out of scope?

本文关键字:作用域 定义 循环 变量      更新时间:2023-09-26

我认为变量应该不在循环中,因此只定义一次变量。

喜欢

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
});

如果创建多个新实例,则不会花费任何费用?

只有当你在循环之外用它做一些事情时,它才真正重要。

  1. 在循环外定义target意味着在循环执行后,循环命中的最后一个$('input[name=' + ele + ']')元素仍将分配给target变量。
  2. 在循环内定义target将意味着target将在循环外部未定义

两种foreach的行为将有所不同。 forEach为数组中的每个项目创建新的scope函数级别)。

对于全局变量,它将覆盖每次迭代的值。对于本地,它将为每个项目创建新实例。

如果在forEach中处理任何click events,对于global变量,当值被覆盖时,它将始终考虑最后一项。

两者不是一回事

它不仅仅是一个循环,它是在循环中调用的函数。

每个函数都有自己的作用域。

在第一个示例中,target 对于包含此 forEach 循环的函数是可见的,在第二个示例中,target 仅在此函数内可见。