情况有点像——
var someVar = some_other_function();
someObj.addEventListener("click", function(){
some_function(someVar);
}, false);
问题是 的值someVar
在 的侦听器函数内不可见addEventListener
,它可能被视为新变量。
情况有点像——
var someVar = some_other_function();
someObj.addEventListener("click", function(){
some_function(someVar);
}, false);
问题是 的值someVar
在 的侦听器函数内不可见addEventListener
,它可能被视为新变量。
为什么不直接从事件的目标属性中获取参数?
例子:
const someInput = document.querySelector('button');
someInput.addEventListener('click', myFunc, false);
someInput.myParam = 'This is my parameter';
function myFunc(evt)
{
window.alert(evt.currentTarget.myParam);
}
<button class="input">Show parameter</button>
JavaScript 是一种面向原型的语言,记住!
你写的代码绝对没有问题。双方some_function
并someVar
应访问的,以防他们在上下文中可用的匿名
function() { some_function(someVar); }
被创建。
检查警报是否为您提供了您一直在寻找的值,确保它可以在匿名函数的范围内访问(除非您有更多代码someVar
对调用旁边的同一变量进行操作addEventListener
)
var someVar;
someVar = some_other_function();
alert(someVar);
someObj.addEventListener("click", function(){
some_function(someVar);
}, false);
这个问题很老,但我想我会提供一个使用 ES5 的替代方案.bind()
- 为后代。:)
function some_func(otherFunc, ev) {
// magic happens
}
someObj.addEventListener("click", some_func.bind(null, some_other_func), false);
请注意,您需要使用第一个参数设置侦听器函数作为传递给 bind(您的其他函数)的参数,第二个参数现在是事件(而不是第一个,因为它本来是) .
您可以使用 'bind' 绑定所有必要的参数:
root.addEventListener('click', myPrettyHandler.bind(null, event, arg1, ... ));
通过这种方式,你将永远得到event
,arg1
传递,和其他的东西myPrettyHandler
。
http://passy.svbtle.com/partial-application-in-javascript-using-bind