在我的主网页(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>
答案 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中做了一些特别和神奇的事情。我的具体例子确实有用,但它说明了你遇到的问题。