ReturnTrue и returnFalse в источнике jQuery

Я не могу не заметить, что в исходном коде jQuery есть две, казалось бы, бесполезные функции (для v1.9.1, строка 2702 и строка 2706):

function returnTrue() {
    return true;
}

function returnFalse() {
    return false;
}

Какие из них часто вызываются в jQuery. Есть ли причина, по которой они не просто заменяют вызов функции логическим true или false?

Ответ 1

он использовался следующим образом:

stopImmediatePropagation: function() {
    this.isImmediatePropagationStopped = returnTrue;
    this.stopPropagation();
}

здесь isImmediatePropagationStopped - это запрос метод. используется как event.isImmediatePropagationStopped()

конечно, вы можете определить метод экземпляра, например:

event.prototyoe.isImmediatePropagationStopped = function() { return this._isImmediatePropagationStopped };

stopImmediatePropagation: function() {
    this._isImmediatePropagationStopped = true; //or false at other place.
    this.stopPropagation();
}

но вы должны ввести новое свойство экземпляра _isImmediatePropagationStopped для сохранения состояния.

с помощью этого трюка вы можете отключить кучу свойств экземпляра для наличия истинного/ложного состояния здесь, например _isImmediatePropagationStopped, _isDefaultPrevented и т.д.

так что, на мой взгляд, это всего лишь вопрос стиля кода, а не правильный или неправильный.

PS: методы запроса в событии, такие как isDefaultPrevented, isPropagationStopped, isImmediatePropagationStopped, определены в DOM-событии уровня 3 sepc.

spec: http://www.w3.org/TR/2003/NOTE-DOM-Level-3-Events-20031107/events.html#Events-Event-isImmediatePropagationStopped

Ответ 2

Если свойство объекта, аргумент функции и т.д. ожидает function, вы должны предоставить function не a boolean.

Например, в ванильном JavaScript:

var a = document.createElement("a");
a.href = "http://www.google.com/";
/*
 * see https://developer.mozilla.org/en-US/docs/DOM/element.onclick
 * element.onclick = functionRef;
 * where functionRef is a function - often a name of a function declared 
 * elsewhere or a function expression.
 */
a.onclick = true;                        // wrong
a.onclick = returnTrue;                  // correct
a.onclick = function() { return true; }; // correct

Кроме того, запись:

someProperty: returnTrue,

Удобнее, чем писать:

someProperty: function(){
    return true;
},

Тем более, что их называют довольно часто.