为了账号安全,请及时绑定邮箱和手机立即绑定

闭包的案例疑问?

闭包的案例疑问?

胡说叔叔 2018-10-11 13:11:31
    function process(data){         alert(data);     }     var someReallyBigData=function(){         //dosomeing     }     process(someReallyBigData);     var btn=document.getElementById("my_button");     btn.addEventListener("click",function click(evt){        alert("button click");     },false);     《你不知道的javascript》说是,由于click函数形成了一个覆盖整个作用域的闭包,javascript  引擎极有可能依然保存着这个结构(取决于具体实现);  有两疑问:   1、click函数形成了一个覆盖整个作用域的闭包??该如何理解?   2、取决于具体实现。又该如何理解?   烦诸位大神解惑!      
查看完整描述

1 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

不是什么大神,说说自己的理解,仅供参考:
先说一下实现: 就是不同的浏览器对某些相同的功能实现的方式可能不同,这个就是实现。


我把书中的代码改装一下,改装理由:如果在全局中执行代码,声明的函数和变量都在全局作用域中,所以是一直存在的,当网页关闭时才会销毁,也就不存在闭包等,所以书中的代码应该是在某一个函数中,我就用一个IIFE代替。

(function(){
  function process(data){
      alert(data);
  }
  var someReallyBigData=function(){
      //dosomeing
  }
  process(someReallyBigData);

  var btn=document.getElementById("my_button");
  btn.addEventListener("click",function click(evt){
     alert("button click");
  },false);})()

因为点击事触发click函数可能会调用外层函数作用域中的变量,所以形成了闭包,所以导致可能不会回收。


查看完整回答
反对 回复 2018-11-18
  • 1 回答
  • 0 关注
  • 629 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号