Нет существенной разницы в том, как выполняется код между этим:
<script>
function foo() {
}
foo();
</script>
и этим
<script src="foo.js"></script>
... где foo.js
содержит
function foo() {
}
foo();
Итак, если у вас есть код, который работает в первом случае, а не во втором, наиболее вероятным объяснением является то, что у вас есть элементы script
в разных местах на странице.Помните, что сценарий выполняется inline при разборе документа, и поэтому важно, находится ли сценарий выше или ниже содержимого, к которому он относится.(Если скрипт просто устанавливает обработчик, который будет вызываться позже, а обработчик ссылается на элементы, которые еще не существуют, это нормально, если они существуют к моменту выполнения обработчика.)
Существует небольшая разница между встроенным сценарием и сценарием, загружаемым из внешнего файла (кроме очевидного бита, который должен быть загружен файл), то есть в случае внешнего файлабраузер не читает скрипт, ища конец тега скрипта, что хорошо, если фактические символы </script>
появляются в вашего скрипта (например, в строковом литерале 'в какой-то момент мы будем использовать его - вот почему вы увидите, что иногда оно написано <\/script>
, поскольку обратный слеш не имеет значения для JavaScript, но строка больше не соответствует тому, что ищет браузер).Но это причина, по которой код не работает в строке, когда он работает во внешнем файле, а не наоборот '.