关于函数的Javascript问题

时间:2010-04-20 15:36:21

标签: javascript proj4js

在我的主网页(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 个答案:

答案 0 :(得分:5)

是的,这是经常完成的,因为Javascript函数可以放入其他文件中并拉入以这种方式工作的页面。

答案 1 :(得分:4)

您的第二个脚本标记指定src。将加载和解析.js文件的内容,但脚本标记内的代码(mouseMove函数)将被忽略。如果你想要.js文件的功能和内容,你需要将它们分成两个不同的脚本标签。

答案 2 :(得分:1)

根据你的评论,这就是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中做了一些特别和神奇的事情。我的具体例子确实有用,但它说明了你遇到的问题。