Каков результат в JavaScript с несколькими библиотеками, которые используют $ - PullRequest
10 голосов
/ 11 мая 2011

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

Упс, этого не хватало до ... :

<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>

Порядок 3 сценариев может варьироваться.Каков будет результат?

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

function $ () {
 return false;
}

Сьюзи определяет $ как

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

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

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

Ответы [ 3 ]

18 голосов
/ 11 мая 2011

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

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

16 голосов
/ 11 мая 2011

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

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

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

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

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

5 голосов
/ 11 мая 2011

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

...