【发布时间】:2017-09-02 22:05:01
【问题描述】:
我对这段代码有疑问。
var uls = document.getElementsByClassName("gal");
for (var i = 0; i < uls.length; i++) {
// impossible to pass uls[i] as callback argument (undefined in callback)
uls[i].addEventListener("click", function() { openSlideShowModal(uls[i].tagName);} );
}
我有错误:Uncaught TypeError: Cannot read property 'tagName' of undefined
我无法解释为什么 uls[i] 是 undefined 因为它是全局的。我知道它没有用,因为它可以通过回调中的 this 访问。但是我偶然发现了这个难以理解的错误。
此外,如果我稍微修改一下,我将不再有错误
var uls = document.getElementsByClassName("gal");
for (var i = 0; i < uls.length; i++) {
tagName = uls[i].tagName;
// impossible to pass uls[i] as callback argument (undefined in callback)
uls[i].addEventListener("click", function() { openSlideShowModal(tagName);} );
}
【问题讨论】:
-
OK i = 1 在我的代码中,这就是为什么我有一个“未定义”(只有一个 ul)
标签: javascript scope callback