在闭包内创建的事件上调用闭包函数

时间:2014-07-22 10:55:44

标签: javascript html dom closures

我试图在闭包函数中创建一些select标签,并向它们附加一个事件,调用闭包中的另一个函数。

这是我的代码的简化版本:

var SomeClosure = function() {
    this.build = function(){
        var mydiv = document.getElementById('mydiv');
        var newSelect = document.createElement('select');
        newSelect.onchange = (function() {
            var selfRef = this;
            return function() { 
                selfRef.changeselection();
            }
        })();

        mydiv.appendChild(newSelect);
    };

    this.changeselection = function(){
        // do something
    }
}

然而,我所得到的只是“自我改变。变化选择”不是一个功能'。我哪里错了?

我不需要传入select的值,只需调用该函数即可。但是,如果我确实需要传递它的价值,我该怎么做?

1 个答案:

答案 0 :(得分:1)

将您的代码更改为:

var selfRef = this;
newSelect.onchange = (function() {
    return function() { 
        selfRef.changeselection();
    }
})();

立即函数内的上下文是Window,所以你得到错误的引用。在这种情况下,如果这是onchange事件处理程序的全部代码,您可能根本不需要IIFE。