Отдельно загруженные источники Javascript могут влиять на глобальный контекст. Таким образом
window.foo = "bar";
в одном исходном файле позволит другому источнику (загруженному впоследствии) проверить:
if (window.foo === "bar") {
// do something
}
Это должно сработать, иначе было бы невозможно создать что-то похожее на все популярные фреймворки Javascript.
Ключевое слово "this" имеет смысл только внутри функции, и его значение не имеет ничего общего с исходным файлом, из которого была получена функция (по крайней мере, в прямом смысле этого слова).
изменить & mdash; Я предполагаю, что интересная вещь здесь - это поведение интерпретатора Javascript, которое (используя термин в вопросе) «поднимает» объявления функции перед другим кодом в вычисляемом блоке. Это также делается по сценарию, когда браузер загружает их. Таким образом, объявления функций в блоке сценария интерпретируются перед другим кодом в каждом блоке , но один тег <script>
будет полностью оценен до загрузки и оценки следующего тега <script>
.
Ситуация усложняется, если для загрузки сценариев вы используете что-то вроде LabJS или extension.js, но я не знаю ни одного контекста, в котором вы могли бы полагаться на сценарии, «смешивающиеся» как-то , если Вы явно объединяете их на сервере.