2016-09-18 46 views
0

htmlファイルで定義されているボタンをクリックすると、test1.jsで定義されているimmediate関数を呼び出そうとしています。常に "テストは未定義です"というエラーがスローされます。即座の関数であることを少し気づいています。すぐに呼び出されるため、「未定義のエラー」が返されます。しかし、ボタンをクリックした直後の関数(メソッド、プロパティなどへのアクセス)を呼び出すことができる方法はありますか?外部関数からのJavascript即値関数呼び出し

ありがとうございます。あなたが生命維持がtmpプロパティを持つオブジェクトを返すようにコードを変更する必要が

//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

あなたの生命維持には何も返しません – Redu

答えて

2

。次のように入力します。

var test = (function(){ 
alert(window); 
var tmp = 'hello'; 
return {tmp:tmp}; 
}()); 
0

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>

関連する問題