函数在同一个文件中定义但在另一个文件中未定义

用户8221288

在 file_b.js 我有这个功能

function date_of_birth(target, selector, days) { // Do something }

在 file_a.js 中,我尝试调用该函数,date_of_birth('a', 'b', 30)但出现错误:未定义 date_of_birth

所以我尝试了:

window.date_of_birth = function date_of_birth(target, selector, days) { // Do something }

当我打电话时window.date_of_birth('a', 'b', 30);,我收到错误:window.date_of_birth is not a function

当我打电话时console.log(window.date_of_birth);,我得到undefined

在我使用的两个文件中:

$(document).ready(function() {

});

为什么我的函数没有定义?

TJ克劳德

在 2020 年末,您将使用模块来执行此操作,要么依赖于所有现代主要浏览器中都存在的本机支持,要么依赖于 Webpack 或 Rollup.js 等使用模块语法获取代码并将其捆绑到旧浏览器的捆绑器。

使用模块语法,在简单的情况下,您可以导出要提供的函数:

export function date_of_birth(/*...*/) {
    // ...
}

这是一个导出的函数声明,它创建了一个命名的导出。另一个模块中想要使用该函数的代码将导入该函数:

import { date_of_birth } from "./module-name.js";

这个主题还有很多,更多关于 MDN或我的书JavaScript: The New Toys 的第 13 章(如果有兴趣,可以在我的个人资料中找到链接)。


旧答案:

在您的原始代码中,它是未定义的,因为它不是全局的。当你在另一个函数中定义一个函数时,我认为你已经完成了,就像这样:

$(document).ready(function() {
    function date_of_birth(target, selector, days) { // Do something }
});

...该函数只能在该ready回调中访问,而不是全局访问。

当您将其更改为:

$(document).ready(function() {
    window.date_of_birth = function date_of_birth(target, selector, days) { // Do something };
});

这确实使它成为一个全局的,所以错误告诉我们ready另一个文件(你正在使用函数的地方)的ready回调在那个文件(你正在定义函数的地方)中回调之前运行

如何修复:

  1. 为您的应用选择一个唯一标识符,例如MyApp(它不必是全局唯一的,它只需要 A)不是在浏览器环境中定义的东西,B)在未来的某个时候可能不会在浏览器环境中定义,以及 C)不是由您使用的任何库定义。)例如,jQuery 使用jQuery.

  2. 在定义此函数的文件中,执行以下操作:

     var MyApp = MyApp || {};
     MyApp.date_of_birth = function date_of_birth() { /*...*/ };
    

    或者,如果您有用于类范围数据的共享函数或想要保密的东西,则可以使用包装函数:

     var MyApp = MyApp || {};
     (function() {
         function privateWorkerFunction() {
         }
         MyApp.date_of_birth = function date_of_birth() { /*...*/ };
         // ...
     })();
    
  3. 在您使用它的文件中,像这样使用它:

     MyApp.date_of_birth(/*...*/);
    
  4. 确保定义函数的文件在使用它的文件之前,将两者都放在 HTML 的末尾(就在结束</body>标记之前),并去掉ready回调(没有必要;如果脚本在文件,东西已经准备好了)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

传递给另一个.js文件中的函数时,属性未定义

来自分类Dev

nodejs-在另一个js文件中打印未定义的调用函数

来自分类Dev

在具有来自另一个文件的内部数组的函数中未定义

来自分类Dev

未定义的方法-从另一个文件中调用一个文件中的类

来自分类Dev

在另一个文件中声明的“未定义”功能?

来自分类Dev

在另一个文件中导出,在同一个文件中调用

来自分类Dev

NameError:名称“ a”未定义。使用同一类中另一个函数的变量

来自分类Dev

在 android ndk 中的同一个 .cpp 文件上调用另一个 C++ 函数

来自分类Dev

在另一个函数React返回的匿名函数中,“ this”是未定义的

来自分类Dev

在另一个函数中调用时未定义函数(Python)

来自分类Dev

C标头中的一个函数的“未定义的引用”,而另一个函数中的“未定义的引用”

来自分类Dev

如何将参数从一个函数传递到另一个函数,但在php中的同一个类中

来自分类Dev

GO:另一个文件(相同的程序包)中的对象引发未定义的错误

来自分类Dev

使用另一个 php 文件中的 php 文件中定义的函数时出错

来自分类Dev

需要定义另一个文件中的对象

来自分类Dev

为什么我在React中的状态在一个函数中定义而在另一个函数中未定义?

来自分类Dev

如何在一个实例中未定义同一项目而又在另一个实例中进行定义

来自分类Dev

从另一个文件调用时找不到在一个文件中定义的函数

来自分类Dev

如何从另一个QML文件调用QML文件中定义的Javascript函数?

来自分类Dev

如何从另一个QML文件调用QML文件中定义的Javascript函数?

来自分类Dev

在一个管道中定义的gulp var在另一个管道中未定义

来自分类Dev

AngularJS从同一模块中的另一个函数调用模块中定义的函数

来自分类Dev

CLion中另一个CMakeLists.txt文件中的用户定义函数

来自分类Dev

如何访问在Matlab的另一个文件中定义的函数中的那些变量?

来自分类Dev

如何从python中的另一个文件访问构造函数中定义的变量

来自分类Dev

当需要另一个文件的模式时,Mongoose Populate返回未定义的

来自分类Dev

如何通过另一个文件中另一个文件定义的变量来使用该文件中包含eval的函数?

来自分类Dev

如何调用另一个cg着色器文件中定义的函数

来自分类Dev

如何在g ++中使用另一个文件中定义的函数?

Related 相关文章

  1. 1

    传递给另一个.js文件中的函数时,属性未定义

  2. 2

    nodejs-在另一个js文件中打印未定义的调用函数

  3. 3

    在具有来自另一个文件的内部数组的函数中未定义

  4. 4

    未定义的方法-从另一个文件中调用一个文件中的类

  5. 5

    在另一个文件中声明的“未定义”功能?

  6. 6

    在另一个文件中导出,在同一个文件中调用

  7. 7

    NameError:名称“ a”未定义。使用同一类中另一个函数的变量

  8. 8

    在 android ndk 中的同一个 .cpp 文件上调用另一个 C++ 函数

  9. 9

    在另一个函数React返回的匿名函数中,“ this”是未定义的

  10. 10

    在另一个函数中调用时未定义函数(Python)

  11. 11

    C标头中的一个函数的“未定义的引用”,而另一个函数中的“未定义的引用”

  12. 12

    如何将参数从一个函数传递到另一个函数,但在php中的同一个类中

  13. 13

    GO:另一个文件(相同的程序包)中的对象引发未定义的错误

  14. 14

    使用另一个 php 文件中的 php 文件中定义的函数时出错

  15. 15

    需要定义另一个文件中的对象

  16. 16

    为什么我在React中的状态在一个函数中定义而在另一个函数中未定义?

  17. 17

    如何在一个实例中未定义同一项目而又在另一个实例中进行定义

  18. 18

    从另一个文件调用时找不到在一个文件中定义的函数

  19. 19

    如何从另一个QML文件调用QML文件中定义的Javascript函数?

  20. 20

    如何从另一个QML文件调用QML文件中定义的Javascript函数?

  21. 21

    在一个管道中定义的gulp var在另一个管道中未定义

  22. 22

    AngularJS从同一模块中的另一个函数调用模块中定义的函数

  23. 23

    CLion中另一个CMakeLists.txt文件中的用户定义函数

  24. 24

    如何访问在Matlab的另一个文件中定义的函数中的那些变量?

  25. 25

    如何从python中的另一个文件访问构造函数中定义的变量

  26. 26

    当需要另一个文件的模式时,Mongoose Populate返回未定义的

  27. 27

    如何通过另一个文件中另一个文件定义的变量来使用该文件中包含eval的函数?

  28. 28

    如何调用另一个cg着色器文件中定义的函数

  29. 29

    如何在g ++中使用另一个文件中定义的函数?

热门标签

归档