不,没有充分的理由为此使用全局变量。只需将所有代码包装在一个函数中以避免污染全局命名空间就很容易了:
(function() {
//all your code here
})();
但我认为更好的解决方案是在单击按钮时删除事件处理程序。这是一个例子:
HTML:
<button id="click_me">Click me</button>
JavaScript:
function click_function() {
alert('You clicked the button with ID ' + this.id);
}
function click_listener() {
click_function.call(this);
this.removeEventListener('click', click_listener);
}
document.getElementById('click_me').addEventListener('click', click_listener);
或者,一些 JS 库可以很容易地分配一个只会触发一次的处理程序。事实上,我强烈建议您这样做:您不必键入几乎一样多的代码。例如,当使用 jQuery 时,你可以只写:
$('#click_me').one('click', function() {
alert('You clicked the button with ID ' + this.id);
});
这与上面的代码做同样的事情,除了它兼容更多的浏览器,包括旧版本的 IE。