Вопрос JavaScript по функциям
-
28-09-2019 - |
Вопрос
На моей главной веб-странице Web (Viewer.aspx) у меня есть бирки сценария JavaScript, как это
<script language="javascript" type="text/javascript">
function initialize() {
var map = $find('Map1');
map.add_mouseMove(mouseMove);
}
</script>
В рамках этих тегов сценария у меня есть функция. Можно ли позвонить другую функцию, которая находится в другом теге сценария, как это?
<script language="javascript" type="text/javascript" src="Resources/JavaScript/proj4js-combined.js">
function mouseMove(sender,eventArgs) {
var source = new Proj4js.Proj('EPSG:3116');
var dest = new Proj4js.Proj('WGS84');
var p = new Proj4js.Point(px, py);
Proj4js.transform(source, dest, p);
}
</script>
Решение
Согласно вашему комментарию, вот то, о чем говорил TJ - вам нужно повернуть свой второй блок сценария во что-то подобное:
<script type="application/javascript" src="Resources/JavaScript/proj4js-combined.js"></script>
<script type="application/javascript">
function mouseMove(sender,eventArgs) {
var source = new Proj4js.Proj('EPSG:3116');
var dest = new Proj4js.Proj('WGS84');
var p = new Proj4js.Point(px, py);
Proj4js.transform(source, dest, p);
}
</script>
... но вы действительно должны просто переместить встроенный код код (что находится внутри 2-го <script>
Тег в моем ответе) на внешний файл JavaScript.
Редактировать 1: Из какого фона программирования вы идете? Если это что-то вроде C # или Java, вам нужно забыть то, что вы знаете о тех, и подходят JavaScript полностью по-разному. JavaScript - это интерпретированный язык, а не компилированный; Среди прочего, это означает, что Порядок, в котором ваши функции объявлены вопросы.
Когда я говорю «декларация функции», я имею в виду все, что выглядит так:
function myNewFunction()
{
// anything else here
}
Это говорит о переводке JavaScript о новой функции, называемой myNewFunction
, чье тело состоит из того, что вьющихся скобках.
Вот пример того, о чем я говорю, когда я говорю, что вы используете функцию, прежде чем вы его заявили. Рассмотрим следующий блок кода (в изоляции от любого другого JavaScript, скажем, во внешнем файле JavaScript):
function foo() // this line declares the function called "foo"
{
}
function bar() // this line declares the function called "bar"
{
foo(); // this line invokes the previously declared function called "foo"
}
Это будет работать, как ожидалось, потому что foo()
был объявлен до того, как вы назвали это. Тем не менее, что (звучит как), вы пытаетесь сделать, это аналогично этому:
function foo() // this line declares the function called "foo"
{
bar(); // this line tries to invoke the function called "bar"
// but it hasn't been declared yet! so it's undefined
}
function bar() // this line declares the function called "bar"
{
}
Если вы должны были запустить этот второй фрагмент JavaScript, это не будет работать, потому что вы называете функцию до того, как она была объявлена. *
* Сноска: Это на самом деле не так, потому что используя этот синтаксис (function foo() { ... }
) делает что-то особенное и волшебное в JavaScript. Мой конкретный пример на самом деле будет работать, но это иллюстрирует проблему, которую у вас есть.
Другие советы
Да, это делается довольно регулярно, так как функции JavaScript могут быть введены в другие файлы и натягиваются на страницы, которые работают таким образом.
Ваш второй тег скрипта определяет src
. Отказ Содержимое файла .js будет загружено и анализируют, но код внутри тега скрипта ( mouseMove
Функция) будет игнорироваться. Если вы хотите как функцию, так и содержимое файла .js, вам нужно отделить их на два разных тега скрипта.