在第一个js文件中定义的函数在另一个js文件中不起作用

时间:2017-01-04 14:03:03

标签: javascript jquery

我有一个index.php文件

<!DOCTYPE HTML>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="test1.js"></script>
<script src="test2.js"></script>
</head>
<body>
</body>
</html>

TEST1。 js是

$(document).ready(function(){

  alert('hello');
function check(){
    alert('hello i should also appear'); }
 });

而test2.js是

  $(document).ready(function(){

 check();
  });

hello正在提醒,但是hello i should also appear没有提醒,有人可以告诉我这里我做错了什么。   谢谢你的优势

5 个答案:

答案 0 :(得分:3)

您的函数是在匿名function(){}内定义的,因此可以在其范围内调用它。

您应该修复它并在其外部定义函数:

// now it will be visible everywhere
var check;


$(document).ready(function(){

  alert('hello');
  check = function (param){
    alert('hello i should also appear. Param passed is ' + param); }
  });
});

答案 1 :(得分:1)

在test1.js下,请用document.ready写出你的功能。写在document.ready内的函数不能从外面访问。所以你必须从document.ready

移出它
function check(){
  alert('hello i should also appear'); 
}

答案 2 :(得分:0)

您已在传递给document.ready()的第一次调用的闭包中定义了“check”。传递给document.ready()的第二次调用的闭包无法访问第一个闭包的范围,在这种特殊情况下,只要在其中定义闭包,函数“check”只会保持不变。 / p>

您需要将检查功能移出闭包,并移动到更高的词法范围,两个闭包都可以访问它。

答案 3 :(得分:0)

你应该把功能写成全局的。如果您在document.ready()中写入,则该功能范围受限,因此您无法从其他javascript文件访问它

答案 4 :(得分:0)

test1.js 更改为

$(document).ready(function() {
    alert('hello');
});
function check() {
    alert('hello i should also appear');
}

并确保在加载 test2.js 之前加载 test1.js