Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从一个js文件调用函数到另一个js文件时出现问题_Javascript - Fatal编程技术网

Javascript 从一个js文件调用函数到另一个js文件时出现问题

Javascript 从一个js文件调用函数到另一个js文件时出现问题,javascript,Javascript,在data.js文件中,我有: (function () { data() function runThisWhenDataIsFinished() { console.log("Works!"); } })(); 在app.js文件中,我有 function data() { console.log("Im in the data function"); runThisWhenDataIsFinished(); } 当

在data.js文件中,我有:

(function () {

   data() 

   function runThisWhenDataIsFinished() {

        console.log("Works!"); 

   }


})();
在app.js文件中,我有

function data() {

    console.log("Im in the data function");

    runThisWhenDataIsFinished();

}
当我调用data()时,我得到消息“Im in the data function”,当我尝试调用runThishWhenDaisFinished()方法时,我得到错误:runThishWhenDaisFinished()方法未定义

那么,如何从app.js访问data.js中的runThishWhenDaisFinished方法呢


致以最诚挚的问候

您不能执行此操作,因为
在数据完成时运行此操作
是词汇范围(对于其父函数)。如果希望能够在该范围之外访问它,则必须使用某种全局名称空间


请参见您不能执行此操作,因为
在数据完成时运行this
是词汇范围(到其父函数)。如果希望能够在该范围之外访问它,则必须使用某种全局名称空间


请参见

与其说这些文件在不同的文件中,不如说
在匿名函数中运行thiswerndaisfinished()
。如果将其移到函数外部,只要在进行
data()
调用之前加载了
data.js
,它就会正确运行。

与其说这些文件在不同的文件中,不如说
runthishwhendaisfinished()
在匿名函数中。如果将其移到函数外部,只要在进行
data()
调用之前加载了
data.js
,它就会正确运行。

一些注释:

  • 首先,在调用“data()”函数后定义“runThishWhenDaisFinished”;因此,无法定义函数

  • 事件。如果在定义函数后调用“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();

})(); 
如前所述,我建议您查看模块模式,了解您真正想要做的事情。

一些评论:

  • 首先,在调用“data()”函数后定义“runThishWhenDaisFinished”;因此,无法定义函数

  • 事件。如果在定义函数后调用“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();

})(); 

如前所述,我建议您查看模块模式,以了解您真正想要做的事情。

从技术上讲,运行此功能当DaisFinished不是匿名函数时,它的作用域是定义它的函数。为了成为匿名函数,不能将其命名为。:)不是想成为一个混蛋,只是想避免对op的混淆。@ilanberci我没有说
运行thishwhendaisfinished()
是一个匿名函数。我是在匿名函数中说的。它的作用域是匿名函数。从技术上讲,RunThisWhenDaisFinished不是匿名函数,它的作用域是定义它的函数。为了成为匿名函数,不能将其命名为。:)不是想成为一个混蛋,只是想避免对op的混淆。@ilanberci我没有说
运行thishwhendaisfinished()
是一个匿名函数。我是在匿名函数中说的。它的作用域是一个匿名函数。我知道从不使用全局变量,如果你阅读我的其他问题,你会了解我在做什么:我不能让它工作,就像死胡同=)我知道从不使用全局变量,如果你阅读我的其他问题,你会了解我在做什么:我不能让它工作,就像死胡同=)