Нет, нет никаких оснований использовать глобальные переменные для этого. Это просто достаточно просто обернуть весь код в функции, чтобы избежать загрязнения глобального пространства имен:
(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.
Конечно, но вы можете избежать глобалам, если вы просто обернуть все в функции. Btw, 'window.infunction! = Undefined' будет' true' для 'undefined' и' null'. Нет необходимости явно проверять значение «null». –
Почему строка '' true''? Почему не просто фактическое логическое значение «true»? – RobIII