Javascript вопрос о функциях - PullRequest
       12

Javascript вопрос о функциях

1 голос
/ 20 апреля 2010

На моей главной веб-странице (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>

Ответы [ 3 ]

5 голосов
/ 20 апреля 2010

Да, это делается довольно регулярно, поскольку функции Javascript могут быть помещены в другие файлы и помещены на страницы, которые работают таким образом.

4 голосов
/ 20 апреля 2010

Ваш второй тег сценария указывает src.Содержимое файла .js будет загружено и проанализировано, но код внутри тега скрипта (функция mouseMove) будет игнорироваться.Если вам нужны и функция, и содержимое файла .js, вам нужно разделить их на два разных тега скрипта.

1 голос
/ 20 апреля 2010

Согласно вашему комментарию, вот что T.J. мы говорили о том, что вам нужно превратить ваш второй блок скриптов в нечто вроде этого:

<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>

... но вам действительно нужно просто переместить блок встроенного кода (что находится во втором теге <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. Мой конкретный пример на самом деле сработает, но он иллюстрирует вашу проблему.

...