JavaScript scoping
JavaScript scoping
本文关键字:scoping JavaScript 更新时间:2023-09-26
这可能是,也可能是一个常见的问题,但我找不到答案,至少在这个特定的例子中找不到——我相信这是一个常见的例子。
在下面的代码中,为什么程序发出3,3次警报?为什么,当使用let时,它会像你期望的那样工作?
是因为当使用let时,每次都引用一个新变量还是不同的东西?如果这是一个糟糕的问题,我很抱歉——我只是想把我的头绕起来……
var arr = [1,2,3];
var o = [];
for(var i = 0; i < arr.length; i++) {
var val = arr[i];
o.push(function(){ alert(val); })
}
o.forEach(function(func){func()});
所有的警报链接到您覆盖的val
变量。
如果你想保持它的唯一性,那么你需要限定它的作用域:
var arr = [1, 2, 3];
var o = [];
for (var i = 0; i < arr.length; i++) {
//closed scope to keep VAL unique
(function() {
var val = arr[i];
o.push(function() {
alert(val);
})
})();
}
o.forEach(function(func) {
func()
});
相关文章:
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 使用php或javascript从facebook相册URL中删除多余的部分
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在JavaScript中将字符串转换为函数引用
- 模糊事件的Javascript测试
- Javascript更改图标
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 如何使用WCF服务和javascript表单post上传.doc文件
- javascript结合了数组和字典
- 这是什么 ==- javascript 运算符
- 从javascript创建一个列表
- 无法在通过jQuery的ajax加载的页面中执行javascript
- Javascript:selenium Web驱动程序isDisplayed()不工作
- 如何通过ajax刷新JSF填充的javascript变量
- 如何在Javascript中将JSon对象转换为数组
- Javascript生成的表单未提交
- JavaScript scoping
- JavaScript scoping