在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不是函数
当我致电console.log(window.date_of_birth);
时,我会未定义。
在我使用的两个文件中:
$(document).ready(function() {
});
为什么我的函数没有定义?
答案 0 :(得分:1)
在原始代码中,它是未定义的,因为它不是全局的。当你在另一个函数中定义一个函数时,我已经完成了,就像这样:
$(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
回调另一个文件(你使用函数)在{{1}之前运行在该文件中回调(你 defininig 该函数)。
如何修复它(在2018年;在2019年答案会有所不同,因为ready
变得更加可行):
为您的应用选择一个唯一标识符,例如import
。 (它不必是全局唯一的,它只需要A)不是在浏览器环境中定义的东西,B)不是在将来的某个时候可能在浏览器环境中定义的东西,并且C)不是你使用的任何lib定义的东西。)例如,jQuery使用MyApp
。
在定义此功能的文件中,执行以下操作:
jQuery
在您使用它的文件中,使用它:
var MyApp = MyApp || {};
(function() {
MyApp.date_of_birth = function date_of_birth() { /*...*/ };
})();
确保定义该函数的文件位于使用它的文件之前,将它们放在HTML的末尾(就在结束MyApp.date_of_birth(/*...*/);
标记之前),并删除{{1}回调(没有必要;如果脚本位于文档的末尾,那么事情已经足够了)。
答案 1 :(得分:0)
您需要在HTML页面中file_b.js
之前指定file_a.js
,如下所示:
<script type="text/javascript" src="file_b.js"></script>
<script type="text/javascript" src="file_a.js"></script>
因此,当您从date_of_birth('a', 'b', 30)
致电file_a.js
时,它已通过file_b.js
呈现。
答案 2 :(得分:0)
当您声明函数function date_of_birth(target, selector, days) { // Do something }
时,您不需要$(document).ready(function(){ })
。
在date_of_birth
函数之外声明$(document).ready
函数,然后尝试。