javascript闭包

<script type="text/JavaScript"> alimama_pid="mm_11307516_1146824_2589042"; alimama_titlecolor="0000FF"; alimama_descolor ="000000"; alimama_bgcolor="FFFFFF"; alimama_bordercolor="E6E6E6"; alimama_linkcolor="008000"; alimama_bottomcolor="FFFFFF"; alimama_anglesize="0"; alimama_bgpic="0"; alimama_icon="0"; alimama_sizecode="12"; alimama_width=468; alimama_height=60; alimama_type=2; </script> <script src="http://a.alimama.cn/inf.js" type="text/javascript"> </script>


     关于闭包,最简单的描述就是 ECMAScript 允许使用内部函数--即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。也就是说,内部函数会在外部函数返回后被执行。而当这个内部函数执行时,它仍然必需访问其外部函数的局部变量、参数以及其他内部函数。这些局部变量、参数和函数声明(最初时)的值是外部函数返回时的值,但也会受到内部函数的影响。

    子函数的作用域与其外部函数的局部变量一直是绑定的。
  1. //闭包的错误使用
  2. function fcn(){
  3.         var messages = ["A""B""C"];
  4.         for (int i = 0; i < items.length; i++) {
  5.             var item = messages[i];
  6.             //创建嵌套函数就形成了一个闭包,当触发node onclick时,产生闭包,
  7.             //即使fcn()函数执行返回但自函数仍可访问其变量item,函数输出永远为 “C”
  8.             node[i].onclick = function(event) { alert(item); }
  9.         }
  10. }
  11. //正确使用创建工厂方法创建闭包
  12. function makeOnClick(item) {
  13.     return function() { alert(item); }
  14. }
  15. function fcn(){
  16.         var messages = ["A""B""C"];
  17.         for (int i = 0; i < items.length; i++) {
  18.            var item = messages[i];
  19.            node[i].onclick = makeOnClick(item);
  20.         }
  21. }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值