Javascript 用自己的方法而不是内联方法创建事件处理程序是否总是更好?

Javascript 用自己的方法而不是内联方法创建事件处理程序是否总是更好?,javascript,javascript-events,Javascript,Javascript Events,哪种方法更好?为什么?如果不是那么黑和白,什么样的例子需要哪种方法 function bindStuff() { var myElement = document.getElementById('someElement'); myElement.addEventListener('click', function(e) { // do stuff }); } 或 如果是非常小的代码,可以将其内联,但是如果您正在做不止一件事情,那么读取代码就更加困难 没

哪种方法更好?为什么?如果不是那么黑和白,什么样的例子需要哪种方法

function bindStuff() {
    var myElement = document.getElementById('someElement');

    myElement.addEventListener('click', function(e) {
        // do stuff
    });
}


如果是非常小的代码,可以将其内联,但是如果您正在做不止一件事情,那么读取代码就更加困难


没有100%正确的答案,但一般来说,如果它是一个语句,则可以内联它,而多个语句应该有各自的方法。

您通常应该选择您认为最容易阅读和维护的样式。然而,第二种选择确实有一个缺点:它是

实际上,我更喜欢第三种选择:

function bindStuff() {
    var myElement = document.getElementById('someElement');

    var clickHandler = function(e) {
        // do stuff
    }

    myElement.addEventListener('click', clickHandler);
}

但是,这主要是一个偏好问题。

有一种情况下,首选
命名处理程序

假设您将一个处理程序绑定到一个元素;由于某种原因,必须删除该元素。你移除它;绑定DOM元素/处理程序如何

这种情况会导致内存泄漏。此外,如果您将同一个处理程序绑定到一个模仿您先前删除的元素,则可能会出现一些缺陷

每当需要删除已绑定处理程序的DOM元素时,请使用名为
的处理程序
,因为在解除DOM和处理程序的绑定时需要传递处理程序


因此,与
addEventListener
相对应的是
removeEventListener

,这会导致非常固执己见的结果,但一般来说:不,您使用的方法取决于用例、具体情况以及大部分个人偏好。通常,您希望使用(和修改)事件处理程序内父函数作用域中的一些变量,例如
myElement
bindStuff
。在这种情况下,您需要闭包,因此您无法轻松提取处理程序。这实际上是我在寻找答案方面的更多内容。
function bindStuff() {
    var myElement = document.getElementById('someElement');

    var clickHandler = function(e) {
        // do stuff
    }

    myElement.addEventListener('click', clickHandler);
}