[英]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.