猿问

闭包的案例疑问?

    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、取决于具体实现。又该如何理解?

   烦诸位大神解惑!

   

   


胡说叔叔
浏览 630回答 1
1回答

梦里花落0921

不是什么大神,说说自己的理解,仅供参考:先说一下实现: 就是不同的浏览器对某些相同的功能实现的方式可能不同,这个就是实现。我把书中的代码改装一下,改装理由:如果在全局中执行代码,声明的函数和变量都在全局作用域中,所以是一直存在的,当网页关闭时才会销毁,也就不存在闭包等,所以书中的代码应该是在某一个函数中,我就用一个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函数可能会调用外层函数作用域中的变量,所以形成了闭包,所以导致可能不会回收。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答