Javascript определяет область действия тегами script?
Никогда не встречал эту проблему и не знаю почему.
Единственное объяснение - проблема с областью.
На той же странице у меня есть 2 раздела JS:
...
<script type="text/javascript">
go();
</script>
<script type="text/javascript">
function go()
{ alert(''); }
</script>
...
Появится сообщение об ошибке: go не определен
, где
...
<script type="text/javascript">
go();
function go()
{ alert(''); }
</script>
...
работает (очевидно).
Тег <script>
создает область действия JS?
помощь?
Ответы
Ответ 1
Это не проблема. Если вы определяете функцию (в глобальной области) в одном элементе script, вы можете использовать ее в другом.
Однако элементы script анализируются и выполняются по мере их возникновения.
Подъем не будет работать через элементы script. Функция, определенная в более позднем элементе script, не будет доступна во время первоначального запуска более раннего элемента script.
Вам либо нужно поменять порядок ваших элементов script, либо задержать вызов функции, пока после script, который определяет, что он запущен (например, привязывая его к обработчику событий onload
).
<script>
function go() {
alert('');
}
</script>
<script>
go();
</script>
или
<script>
window.addEventListener("load", function () {
go();
}, false);
</script>
<script>
function go() {
alert('');
}
</script>
Ответ 2
Анализатор html перестает выполнять ваш script перед переходом к следующим элементам. Итак, следующий элемент script
не выполняется до первого выполнения.
Это сопоставимо с:
<script>
document.getElementById("hello") //null because the html parser hasn't met the div yet.
</script>
<div id="hello"></div>
Ответ 3
Другая причина этого в качестве очевидной ошибки заключается в том, что первый блок script имеет синтаксическую ошибку и полностью отклоняется, но второй блок работает и пропускает код своего собеседника.