来自外部函数的Javascript立即函数调用
问题描述:
我试图在html文件中定义的按钮单击时调用test1.js中定义的直接函数。它总是抛出错误“测试未定义”。我有点意识到,作为一个立即函数,它立即调用,因此它返回“未定义的错误”。但有什么办法可以通过点击按钮来调用直接函数(访问方法,属性等)?来自外部函数的Javascript立即函数调用
预先感谢您。
//test1.js
var test = (function(){
alert(window);
var tmp = 'hello';
}());
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script type="text/javascript" src="test1.js"></script>
<input type="button" id="btn1" value="ClickMe!" />
<script type="text/javascript">
var btn = document.getElementById("btn1");
btn.addEventListener("click",fun1,false);
function fun1(){
alert(test.tmp);
}
</script>
</body>
</html>
答
你必须使IIFE返回一个对象与tmp
属性修改代码。如
var test = (function(){
alert(window);
var tmp = 'hello';
return {tmp:tmp};
}());
答
在运行IIFE后,您需要显式返回包含要提供的任何数据的对象。 (只需添加返回,就像我对下面的代码片段所做的那样)。
//test1.js
var test = (function(){
alert(window);
// you need to return any values you want accessible
return {
tmp: "hello"
}
}());
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script type="text/javascript" src="test1.js"></script>
<input type="button" id="btn1" value="ClickMe!" />
<script type="text/javascript">
var btn = document.getElementById("btn1");
btn.addEventListener("click",fun1,false);
function fun1(){
alert(test.tmp);
}
</script>
</body>
</html>
您IIFE没有返回 – Redu