[英]Why my JavaScript file can't access defined constant from another file?
[英]Why I can't access a JavaScript function defined in a .js file from another .js file?
我是JavaScript的新手,我正在按照教程试验全局范围。
在本教程中,我有3个文件:
1) index.htm :
<html>
<head></head>
<body>
<h1>HELLO WORLD !!!</h1>
<script src="app.js"></script>
<script src="utility.js"></script>
</body>
</html>
如您所见,我包含2个JavaScript文件。
2) app.js :
var person = 'Torny'; // When I call the logPerson() function this line override the person variable value into the global stack
//console.log(person);
logPerson();
3) utility.js中定义了app.js文件中定义的logPerson()函数:
var person = 'Steve';
function logPerson() {
console.log(person);
}
好的,所以我期望以下行为:
在app.js文件中设置字符串'Tony'作为person变量的值,调用logPerson()函数声明到utility.js文件中,然后在控制台中打印'Tony'。
问题是,当我尝试将index.htm文件打开到FireFox时,我进入FireBug控制台,而不是'Tony'值,我得到了这个错误信息:
ReferenceError: logPerson is not defined
因此,似乎从app.js文件中看不到定义到utility.js文件中并导入的logPerson()函数。
为什么? 我错过了什么? 怎么了?
在javascript中,文件的顺序很重要。 您需要先加载定义函数的脚本,然后才能使用它。 切换2 <script>
标签
<body>
<h1>HELLO WORLD !!!</h1>
<script src="utility.js"></script>
<script src="app.js"></script>
</body>
</html>
更改
<script src="app.js"></script>
<script src="utility.js"></script>
至
<script src="utility.js"></script>
<script src="app.js"></script>
;)您尝试从稍后加载的问候语脚本中获取定义
第一个浏览器将解析JS文件。
如果您看到包含脚本的顺序
所以当它解析app.js. 它看到logPerson()
是函数调用而不是函数定义。 此时,文件utility.js未被解析,浏览器也不知道该函数。 (意思是直到它读取utility.js)。
所以要解决这个问题,在dom-loaded之后调用logPerson api,使用body onload
函数。
作为JavaScript代码在运行中解释的解释很简单:作为一个脚本被加载,会立即执行。
所以,你只需要以正确的依赖顺序声明脚本。
在运行定义logPerson
的脚本之前,您运行尝试使用logPerson
的脚本。
如果颠倒脚本的顺序,它将起作用。
函数声明提升仅适用于给定脚本。
就我而言,不是<script>
排序是问题(最初的想法),而是定义函数的范围。 为了能够在其他JS文件功能的访问,我把它就是在这些文件的范围对象的属性。 现在,它可以作为MyObject.myFunction
在MyObject
实例化的任何地方访问。
(function ($) {
function MyObject(data) {
var myFunction = function(){
console.log('');
}
$.extend(this, {
// methods
"myFunction": myFunction,
});
}
}(jQuery));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.