开发者

Javascript question on functions

开发者 https://www.devze.com 2022-12-27 18:25 出处:网络
In my main Web Page (Viewer.aspx) I have a javascript script tag like this <script language=\"javascript\" type=\"text/javascript\">

In my main Web Page (Viewer.aspx) I have a javascript script tag like this

<script language="javascript" type="text/javascript">

function initialize() {
     var map = $find('Map1');           
     map.add_mouseMove(mouseMove);  

 }

</script>

Within those script tags I have a function. Is it possible to call another function that is in a different script tag like this?

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


Yes, this is done quite regularly as Javascript functions can be put into other files and pulled into pages that work this way.


Your second script tag specifies a src. The contents of the .js file will be loaded and parsed, but the code inside the script tag (the mouseMove function) will be ignored. If you want both the function and the contents of the .js file, you need to separate them into two different script tags.


As per your comment, here's what T.J. was talking about - you need to turn your second script block into something like this:

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

...but you should really just move the inline code block (what's inside of the 2nd <script> tag in my answer) to an external Javascript file.


Edit 1: What's the programming background you're coming from? If it's something like C# or Java, you'll need to forget what you know about those and approach Javascript completely differently. Javascript is an interpreted language, not a compiled one; among other things, this means that the order in which your functions are declared matters.

When I say "function declaration," I mean anything that looks like this:

function myNewFunction()
{
   // anything else here
}

This tells the Javascript interpreter about a new function, called myNewFunction, whose body consists of whatever is in the curly braces.

Here's an example of what I'm talking about when I say you are using a function before you've declared it. Consider the following block of code (in isolation from any other Javascript, say, in an external Javascript file):

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

This will work as expected, because foo() was declared before you called it. However, what (it sounds like) you're trying to do is analogous to this:

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

}

If you were to run this second Javascript snippet, it wouldn't work, because you're calling a function before it was declared.*

*Footnote: this is not actually the case, because using this syntax (function foo() { ... }) does something special and magical in Javascript. My particular example will actually work, but it illustrates the problem you're having.

0

精彩评论

暂无评论...
验证码 换一张
取 消