การส่งอาร์กิวเมนต์ไปยังฟังก์ชันการเรียกกลับของ eventListener ต้องสร้างฟังก์ชันแยกและส่งผ่านอาร์กิวเมนต์ไปยังฟังก์ชันที่แยกได้
นี่คือฟังก์ชั่นตัวช่วยเล็ก ๆ ที่คุณสามารถใช้ได้ ตามตัวอย่าง "สวัสดีโลก" ด้านบน)
สิ่งหนึ่งที่จำเป็นต้องมีก็คือการรักษาการอ้างอิงถึงฟังก์ชั่นเพื่อให้เราสามารถลบผู้ฟังได้อย่างหมดจด
// Lambda closure chaos.
//
// Send an anonymous function to the listener, but execute it immediately.
// This will cause the arguments are captured, which is useful when running
// within loops.
//
// The anonymous function returns a closure, that will be executed when
// the event triggers. And since the arguments were captured, any vars
// that were sent in will be unique to the function.
function addListenerWithArgs(elem, evt, func, vars){
var f = function(ff, vv){
return (function (){
ff(vv);
});
}(func, vars);
elem.addEventListener(evt, f);
return f;
}
// Usage:
function doSomething(withThis){
console.log("withThis", withThis);
}
// Capture the function so we can remove it later.
var storeFunc = addListenerWithArgs(someElem, "click", doSomething, "foo");
// To remove the listener, use the normal routine:
someElem.removeEventListener("click", storeFunc);