【问题标题】:javascript callback : undefined global variable [duplicate]javascript回调:未定义的全局变量[重复]
【发布时间】: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


【解决方案1】:

绑定 this 应该可以帮助您将函数返回到调用它的同一上下文中。

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

【讨论】:

    猜你喜欢
    • 2013-01-23
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 2013-01-09
    相关资源
    最近更新 更多