情况有点像

var someVar = some_other_function();
someObj.addEventListener("click", function(){
    some_function(someVar);
}, false);

问题是someVar的值在addEventListener的侦听器函数中是不可见的,在addEventListener中它可能被视为一个新变量。


当前回答

一个简单的方法就是这样

    window.addEventListener('click', (e) => functionHandler(e, ...args));

对我有用。

其他回答

因为你的事件监听器是'click',你可以:

someObj.setAttribute("onclick", "function(parameter)");

我的方法非常简单。这可能对其他人有用,就像它帮助了我一样。 它是…… 当你有多个元素/变量分配给同一个函数,你想要传递引用,最简单的解决方案是…

function Name()
{

this.methodName = "Value"

}

就是这样。 这对我很管用。 那么简单。

function. prototype.bind()是将目标函数绑定到特定作用域并可选地在目标函数中定义this对象的方法。

someObj.addEventListener("click", some_function.bind(this), false);

或者捕获一些词法范围,例如在循环中:

someObj.addEventListener("click", some_function.bind(this, arg1, arg2), false);

最后,如果目标函数中不需要this参数:

someObj.addEventListener("click", some_function.bind(null, arg1, arg2), false);

如果我没有弄错的话,使用bind调用函数实际上创建了一个由bind方法返回的新函数。这将在以后给你带来问题,或者如果你想删除事件监听器,因为它基本上就像一个匿名函数:

// Possible:
function myCallback() { /* code here */ }
someObject.addEventListener('event', myCallback);
someObject.removeEventListener('event', myCallback);

// Not Possible:
function myCallback() { /* code here */ }
someObject.addEventListener('event', function() { myCallback });
someObject.removeEventListener('event', /* can't remove anonymous function */);

记住这一点。

如果你正在使用ES6,你可以按照建议做,但更干净一点:

someObject.addEventListener('event', () => myCallback(params));

其他替代方法,可能没有bind的使用那么优雅,但它对于循环中的事件是有效的

for (var key in catalog){
    document.getElementById(key).my_id = key
    document.getElementById(key).addEventListener('click', function(e) {
        editorContent.loadCatalogEntry(e.srcElement.my_id)
    }, false);
}

它已经测试了谷歌chrome扩展和可能e.srcElement必须替换为e.srcElement在其他浏览器

我发现这个解决方案使用Imatoria发布的评论,但我不能标记为有用的,因为我没有足够的声誉:D