Как "область" работает с несколькими тегами script для Javascript в HTML-документе?
Я не совсем уверен, что происходит между тегами <script>
. Например, приведенное ниже дает ошибку ссылки и тип ошибки в Chrome:
<html>
<head>
<script type="text/javascript">
T.prototype.test = function() {
document.write("a");
}
</script>
<script type="text/javascript">
function T() {}
var v = new T();
v.test();
</script>
</head>
<body>
</body>
</html>
Но это работает:
<html>
<head>
<script type="text/javascript">
</script>
<script type="text/javascript">
T.prototype.test = function() {
document.write("a");
}
function T() {}
var v = new T();
v.test();
</script>
</head>
<body>
</body>
</html>
Ответы
Ответ 1
Верхний script выполняется первым в первом примере, поэтому он еще не знает о T, следовательно, ошибка.
Во втором примере T хорошо определен и известен везде, как только выполняется тэг script. Это связано с тем, что объявления функций поднимаются вверх, независимо от того, какой заказ, они всегда доступны. Объявление объявления функции более подробно объяснено здесь
Второй пример после подъема:
var v,
T = function(){}; /* using comma like this is short-hand for: var v; var T = function(){}; */
T.prototype.test = function() {
document.write("a");
};
v = new T();
v.test();
Ответ 2
Каждый из них анализируется в глобальном контексте, но по порядку. Весь первый тег script анализируется и выполняется до того, как будет рассмотрен второй. В рамках анализа a script объявления функций распознаются заранее, поэтому вторая работает, а первая не работает.