#javascript #dollar-sign
#javascript #знак доллара
Вопрос:
Давайте представим, что это находится в <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>
Порядок трех скриптов может отличаться. Каким был бы результат?
Билли определяет $
как
function $ () {
return false;
}
Сьюзи определяет $
как
function $ () {
return document.getElementById('body');
}
Мэри определяет $
как
function $ () {
alert('I wrote this');
}
Комментарии:
1. Извините, смотрите вопрос сейчас. Я говорю с внешними файлами js. Просто для ясности.
2. как я уже сказал в своем ответе. что бы ни было последним, это определение
$
Ответ №1:
Все, что является последним, является окончательным определением $
Вот почему в (например) jQuery есть, noConflict()
который позволяет использовать переменную, отличную $
от jQuery
Комментарии:
1. Таким образом, это ВСЕГДА [ВСЕГДА] сверху вниз, и все, что является последним, это то, что он будет использовать?
2. Я подтверждаю, что вы говорите, что порядок скриптов действительно имеет значение.
3. нет, если у вас нет
setTimeout(function(){window.$=undefined;},100);
orwindow.onload
, определяющего функцию: P
Ответ №2:
function $ () {
return false;
}
function $ () {
return document.getElementById('body');
}
function $ () {
alert('I wrote this');
}
$(); // alerts "I wrote this"
Более позднее определение перезаписывает существующее. Вот почему обычно рекомендуется проверять, существует ли функция перед ее определением. например
if (typeof $ !== 'function') {
function $(){ /* your code */}
}
или сбой каким-либо разумным способом.
Комментарии:
1. Если функция существует, перезапишите ее пустой функцией? Я думаю, вам нужно немного изменить ваш последний пример.
2. @minitech Хм, да,
!==
это то, что я имел в виду. Комментарий добавлен для ясности.3. @Joel Хороший материал — добавлен к ответу.
4. Я не использовал Jsfiddle, поскольку мой вопрос был связан с несколькими внешними файлами js. Сначала я случайно опубликовал вопрос, в котором этот бит отсутствовал..
5. @Doug Ну, это все одно и то же. Несколько тегов скрипта анализируются последовательно, независимо от того, являются ли они встроенными или внешними, и они фактически являются одним файлом.
Ответ №3:
Выигрывает последняя функция с тем же именем.