[英]Problems with calling function from one js file to another
在文件data.js我有:
(function () {
data()
function runThisWhenDataIsFinished() {
console.log("Works!");
}
})();
在app.js文件中我有
function data() {
console.log("Im in the data function");
runThisWhenDataIsFinished();
}
當我調用data()時,我收到消息“我在數據函數中”,當我嘗試調用runThisWhenDataIsFinished()方法時,我得到錯誤:runThisWhenDataIsFinished()方法未定義。
那么如何從app.js訪問data.js中的runThisWhenDataIsFinished方法呢?
最好的祝福
你不能這樣做是因為runThisWhenDataIsFinished
是詞法范圍的(它的父函數)。 如果您希望能夠在該范圍之外訪問它,則必須使用某種全局命名空間。
見http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth
它們並不是在不同的文件中,而是runThisWhenDataIsFinished()
在匿名函數中。 如果你將它移到函數之外,只要在進行data()
調用之前加載了data.js
它就會正確運行它。
一些評論:
首先, 在調用“data()”函數后定義“runThisWhenDataIsFinished”; 所以沒有辦法定義這個功能
如果在定義函數后調用“data()”事件,則它將無法工作,因為,如果以其他方式解釋,它將僅在匿名函數的范圍內定義。
有些東西可行,但不要這樣做:
function data() {
console.log("Im in the data function");
// The 'globalRunThisWhenDataIsFinished' function is no defined in this scope,
// so it will only be called if it exists as a *global* variable
globalRunThisWhenDataIsFinished();
}
(function () {
// When calling the anonymous function like you do,
// 'this' is the Window object, so you can add "global" variables
// like this. However you probably DO NOT WANT TO DO THAT
this.globalRunThisWhenDataIsFinished = function() {
console.log("Works!");
}
data();
})();
正如所指出的,我建議您查看Module模式以了解您真正想要做的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.