javascript回调:未定义的全局变量

时间:2017-09-02 22:05:01

标签: javascript scope callback

我的代码存在问题。

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

我有错误:未捕获TypeError:无法读取属性&#39; tagName&#39;未定义的

我无法解释为什么 uls [i] 未定义,因为它是全局的。我知道没有使用它,因为它可以通过回调中的 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);} );
} 

1 个答案:

答案 0 :(得分:0)

绑定它应该可以帮助你将函数恢复到调用它的相同上下文中。

function() { 
    openSlideShowModal(uls[i].tagName);
}.bind(this)