在<script>块中定义的JavaScript函数是否可由另一个JS函数访问?</script>

时间:2013-02-06 20:38:07

标签: javascript scope

我的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()吗?

3 个答案:

答案 0 :(得分:4)

是的,您定义了该函数而未将其放入var中,因此它将被提升到作为全局范围的最外层范围。 但是你在声明该函数之前运行create所以它不会看到它,转过它们看看。

答案 1 :(得分:3)

你可能刚试过这个,但我仍然会尝试简要解释一下。

由于JavaScript是客户端,因此它取决于客户端的当前状态。在加载所需部分之前,您将无法访问它。

在您的情况下,首先包含您的create.js文件。加载时,下一个尚未加载。因此var a = show();将查找名为show();的函数,但是会抛出一个错误,指出函数的空引用,因为它在客户端中不可用。

您可以避免这种情况的方法是检查文档的各个部分是否已加载。在jQuery中,这是使用$(document).ready进行的,在经典JavaScript中,您可以在某种程度上依赖window.onloadbody标记的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文件,然后调用其方法。