1

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

最好的祝福

4

3 回答 3

2

你不能这样做,因为runThisWhenDataIsFinished它是词法范围的(对于它的父函数)。如果您希望能够在该范围之外访问它,则必须使用某种全局名称空间。

请参阅http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth

于 2013-02-22T13:42:15.767 回答
2

这些不是在不同的文件中,而是runThisWhenDataIsFinished()在匿名函数中。如果你把它移到函数之外,只要在调用data.js之前已经加载,data()它就会正确运行它。

于 2013-02-22T13:42:31.730 回答
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();

})(); 

正如所指出的,我建议您查看模块模式以了解您真正想要做什么。

于 2013-02-22T13:57:09.493 回答