Каков результат в javascript с несколькими библиотеками, которые используют $

Предположим, что это находится на <head> вашей html-странице.

OOPS, это было немного, чего не было до...:

<script type="text/javascript" src="/include/js/billys.js"></script>
<script type="text/javascript" src="/include/js/susies.js"></script>
<script type="text/javascript" src="/include/js/marys.js"></script>

Порядок трех скриптов может отличаться. Каков был бы результат?

Billy определяет $ как

function $ () {
 return false;
}

Susie определяет $ как

function $ () {
 return document.getElementById('body');
}

Мэри определяет $ как

function $ () {
 alert('I wrote this');
}

Ответ 1

Что бы ни было последним, это окончательное определение $

Вот почему в (например) jQuery есть noConflict(), который позволяет использовать другую переменную, чем $ для jQuery

Ответ 2

Почему бы не попробовать?

function $ () {
 return false;
}
function $ () {
 return document.getElementById('body');
}
function $ () {
 alert('I wrote this');
}
$(); // alerts "I wrote this"

Более позднее определение перезаписывает существующее. Вот почему обычно рекомендуется проверять, существует ли функция, прежде чем определять ее. например.

if (typeof $ !== 'function') {
    function $(){ /* your code */}
}

или провалиться каким-то разумным способом.

Ответ 3

Побеждает последняя функция с тем же именем.