在循环作用域中定义变量或应超出作用域
define variable in loop scope or should be out of scope?
我认为变量应该不在循环中,因此只定义一次变量。
喜欢
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 仅在此函数内可见。
相关文章:
- 在具有命名作用域的自定义Polymer元素中隐藏表行
- 如何在html中以角度显示自定义指令的作用域
- 如何在angularjs中将多个作用域变量传递到自定义指令中
- AngularJS:如何调用指令中定义的函数'控制器的作用域
- AngularJS:ngRepeat作用域在具有隔离作用域和ngTransclude的自定义指令中失败
- AngularJS指令中的作用域未定义,控制器中有ajax请求
- ReferenceError:regeneratorRuntime未定义(但在作用域内工作)
- 监视自定义指令属性在父作用域更改时不发生更改
- 在全局作用域中定义的具有相同名称的变量
- 角度:创建可以调用作用域函数的自定义指令
- AngularJS指令作用域未解析(“属性名称未定义”错误)
- $scope变量在指令隔离作用域中未定义
- AngularJS自定义指令在继承父作用域时访问模板中的属性
- 无法从具有隔离作用域的指令中访问控制器中定义的对象
- 在指令的隔离作用域中定义的调用函数
- 如何使 AngularJS 指令在不隔离作用域的情况下清楚地定义其依赖关系
- JavaScript 通过脚本标签定义作用域
- 在循环作用域中定义变量或应超出作用域
- 如何从事件处理程序调用 AngularJS 作用域定义的函数
- 使用模块全局作用域定义可从prototype访问的私有类字段