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