在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方法呢?
祝你好运
答案 0 :(得分:2)
你不能这样做,因为runThisWhenDataIsFinished
是词法范围(对于它的父函数)。如果您希望能够在该范围之外访问它,则必须使用某种全局命名空间。
请参阅http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth
答案 1 :(得分:2)
并不是说这些文件位于不同的文件中,但runThisWhenDataIsFinished()
是匿名函数。如果您将此移至此功能之外,只要在进行data.js
调用之前已加载data()
,它就会正确运行。
答案 2 :(得分:0)
一些评论:
首先,在调用“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();
})();
正如所指出的,我建议你看看模块模式,以了解你真正想做的事情。