请教个闭包问题。

ufo20020427 2013-01-22 02:24:40

<body>

<div id="divMain"></div>

<script type="text/javascript">

function Test(title)
{
alert(title);
}

function Init(functionName, title)
{
var callFunction = functionName;

return function()
{
var content = '<a href = "#" onclick = callFunction("' + title + '"); >click me</a>';
document.getElementById("divMain").innerHTML = content;
}
}

var aa = Init(Test, 'hello');  
aa();


</script>

</body>


var callFunction作为全局变量放在Function Init外面,则可以弹出对话框,但我这边需要把callFunction定义在function Init中。
所以想采用闭包的形式访问,但发现仍无法调用该函数。谢谢!
...全文
229 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
一個程序員 2013-01-22
  • 打赏
  • 举报
回复
稍微修改一下就可以了:

<body>
 
<div id="divMain"></div>
 
<script type="text/javascript">
 
function Test(title)
{
   alert(title);
}
  
function Init(functionName, title)
{
  var callFunction = functionName; 
 
  return function()
  {             
      var content = '<a href = "#" >click me</a>'; 
      document.getElementById("divMain").innerHTML = content;
      var a = document.getElementById("divMain").childNodes[ 0 ];
      a.onclick = function() { callFunction(title); );
  }    
}
 
 var aa = Init(Test, 'hello');  
 aa(); 
 
 
</script>
 
</body>
KK3K2005 2013-01-22
  • 打赏
  • 举报
回复
var window.callFunction = functionName; ... onclick = window.callFunction("' + title + '"); ...
bbjbepzz 2013-01-22
  • 打赏
  • 举报
回复
你非要拼接的话,用下面的方法吧。 <script type="text/javascript"> function Test(title){ alert(title); } function Init(functionName, title){ var callFunction = functionName; return function() { var content = '<a href = "#" onclick = '+callFunction+'("' + title + '"); >click me</a>'; document.getElementById("divMain").innerHTML = content; } } var aa = Init('Test', 'hello');   aa(); </script>
fzfei2 2013-01-22
  • 打赏
  • 举报
回复
<a href = "#" onclick ="fnName()" >click me</a> 标准写法是fnName只能是个全局的函数 你先要知道生成的的HTML代码,运行和你的闭包没关系了

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧