我的HTML文件中包含以下代码:
<script src = "js/create.js"></script>
<script>
function show() {
//some code here
}
</script>
在JavaScript文件create.js中,我想调用块中定义的函数show()
,如下所示:
//File create.js
var a = show();
在create.js文件中可以访问函数show()
吗?
答案 0 :(得分:4)
是的,您定义了该函数而未将其放入var中,因此它将被提升到作为全局范围的最外层范围。 但是你在声明该函数之前运行create所以它不会看到它,转过它们看看。
答案 1 :(得分:3)
你可能刚试过这个,但我仍然会尝试简要解释一下。
由于JavaScript是客户端,因此它取决于客户端的当前状态。在加载所需部分之前,您将无法访问它。
在您的情况下,首先包含您的create.js文件。加载时,下一个尚未加载。因此var a = show();
将查找名为show();
的函数,但是会抛出一个错误,指出函数的空引用,因为它在客户端中不可用。
您可以避免这种情况的方法是检查文档的各个部分是否已加载。在jQuery中,这是使用$(document).ready
进行的,在经典JavaScript中,您可以在某种程度上依赖window.onload
,body
标记的onload
。
另外还有另外一种方法,请参阅下表。
<html>
<head>
<title>Test!</title>
<script type="text/javascript">
function show(){
alert("Hey there!");
}
</script>
</head>
<body>
<h1>Hey there!</h1>
<p>The alert box should appear after these lines are loaded in client, this will also mean the head is completed, so it's safe to call the function show()</p>
<script type="text/javascript">
show();
</script>
</body>
</html>
在那里,我们当然可以假设头部中定义的函数被加载,直到第二个脚本调用定义的函数可以安全地运行。
答案 2 :(得分:1)
是的,这就是jQuery这样的加载库的工作原理。您包含他们的.js文件,然后调用其方法。