Независимо от структуры на стороне сервера, конечная клиентская сторона - это, в конечном счете, всего одна «страница» в браузере, и любая JavaScript на этой странице или ссылка на нее выполняется браузером. Таким образом, на этой странице вы можете сделать что-то вроде этого:
<script type="text/javascript">
var x = 'some value';
</script>
<script type="text/javascript" src="someFile.js"></script>
Если в someFile.js
есть код, который ссылается на переменную уровня окна с именем x
, тогда эта переменная будет иметь значение 'some value'
. Все загруженные JavaScript на странице или в ссылках в отдельном файле будут выполняться в том порядке, в котором они загружены, и все в том же контексте окна.
В таких структурах, как ASP. NET это может быть полезно, когда значение является динамическим c в представлении и должно использоваться в JavaScript, что похоже на ситуацию, с которой вы столкнулись. Предположим, вы спроектировали свой файл JavaScript так, чтобы он загружался и затем вызывался с некоторыми введенными значениями. Вы можете получить что-то вроде этого:
<script type="text/javascript" src="someFile.js"></script>
<!-- lots of page content, then at the bottom... -->
<script type="text/javascript">
var x = '@someServerSideValue';
invokeJS(x);
</script>
В этом случае может быть много кода внутри someFile.js
, но он все только определен и еще не выполнен. Его выполнение обернуто в функцию, которая вызывается, когда страница завершает загрузку. (В этом случае эта функция называется invokeJS
.) Эта функция ожидает, что параметр (или несколько параметров) предоставит ему значения, необходимые для этого кода, во многом как внедрение зависимостей.