来自外部函数的Javascript立即函数调用

来自外部函数的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>

+0

您IIFE没有返回 – Redu

你必须使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>