javascript - 闭包的案例疑问?
本文介绍了javascript - 闭包的案例疑问?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
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、取决于具体实现。又该如何理解?
烦诸位大神解惑!
解决方案
不是什么大神,说说自己的理解,仅供参考:
先说一下实现
: 就是不同的浏览器对某些相同的功能实现的方式可能不同,这个就是实现。
我把书中的代码改装一下,改装理由:如果在全局中执行代码,声明的函数和变量都在全局作用域中,所以是一直存在的,当网页关闭时才会销毁,也就不存在闭包等,所以书中的代码应该是在某一个函数中,我就用一个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函数可能会调用外层函数作用域中的变量,所以形成了闭包,所以导致可能不会回收。
这篇关于javascript - 闭包的案例疑问?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文