我试图在闭包函数中创建一些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的值,只需调用该函数即可。但是,如果我确实需要传递它的价值,我该怎么做?
答案 0 :(得分:1)
将您的代码更改为:
var selfRef = this;
newSelect.onchange = (function() {
return function() {
selfRef.changeselection();
}
})();
立即函数内的上下文是Window,所以你得到错误的引用。在这种情况下,如果这是onchange
事件处理程序的全部代码,您可能根本不需要IIFE。