Нет. jQuery .one
работает аналогично, например:
- , звонит
addEventListener
, а затем, в обратном вызове, звонит removeEventListener
- , звонит
addEventListener
с { once: true }
в объекте параметров - в jQuery, как при вызове
.on
, а затем, при обратном вызове, при вызове .off
Как только прослушиватель запускается один раз , он откреплен; дальнейшая логика c не происходит, когда событие происходит в будущем, потому что слушатель больше не подключен.
Таким образом, .one
является очень легким для вычислительных ресурсов, даже если вы добавляете лоты и лоты .one
с.
Вы можете увидеть исходный код one
здесь :
if (one === 1) {
origFn = fn;
fn = function (event) {
// Can use an empty set, since event contains the info
jQuery().off(event); // <-------------------------------------------------
return origFn.apply(this, arguments);
};
// Use same guid so caller can remove using origFn
fn.guid = origFn.guid || (origFn.guid = jQuery.guid++);
}
return elem.each(function () {
jQuery.event.add(this, types, fn, data, selector);
});
, где jQuery()
возвращает jQuery коллекция, содержащая элементы, соответствующие текущему селектору. Когда вызывается one
, обратный вызов переносится в другой, который вызывает .off
, как только функция будет выполнена.
Пример кода в ответе, с которым вы связаны, совершенно неэффективен и не должен использоваться особенно для scroll
событий, которые происходят очень часто.