簡體   English   中英

從一個js文件到另一個js文件調用函數的問題

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM