【发布时间】:2016-06-28 17:00:22
【问题描述】:
我有点困惑,
给定示例代码,我在其中加载了几个 url,并连接了事件监听器:
var pages= Array();
var loading= Array();
for(i=0; i < urls.length; i++){
var page =new WebPage(urls[i]);
page.onLoadStarted = function() {
loading[i]= true;
console.log('Loading started');
};
pages[i]=page;
}
我有 5 个 url,我在控制台输出中得到 5 次“加载开始”,但是加载数组只有一个值定义(真),其余的都是“未定义”;
看起来当事件被触发时loading[i]= true; 使用 I 的最后一个值来访问数组而不是使用它的地址。我该如何解决?
我尝试向页面对象添加属性,但同样的事情发生了;
这是我尝试过的:
var pages= Array();
for(i=0; i < urls.length; i++){
var page =new WebPage(urls[i]);
page.onLoadStarted = function() {
page.loading= true;
console.log('Loading started');
};
pages[i]=page;
}
【问题讨论】:
-
如果不能依赖 ES2015,只需使用
for(let i=0;...)或将事件处理程序包装在 IIFE 中
标签: javascript node.js scope event-handling dom-events