从一个js文件到另一个js文件调用函数的问题

时间:2013-02-22 13:39:27

标签: javascript

在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方法呢?

祝你好运

3 个答案:

答案 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();

})(); 

正如所指出的,我建议你看看模块模式,以了解你真正想做的事情。