/*闭包:它是函数运行时候所产生的机制,函数执行会形成一个全新的私有上下
文,可以保护里面的私有变量和外界互不干扰(保护机制),但是大家所认为的
闭包,需要当前上下文不能被出栈释放,这样私有变量及它的值也不会被释放掉
(保存机制);*/
//闭包的作用:保护/保存
/*
JS中的内存优化
【栈内存(执行上下文)】
一般情况下,函数执行完,所形成的上下文会被出栈释放掉
特殊情况:当前上下文中某些内容被上下文以外的事物占用了,
此时不能出栈释放
全局上下文:加载页面创建的,也只是有页面关闭才会被释放掉
【堆内存】
浏览器的垃圾回收机制:
1.引用计数(以IE为主):某些情况会导致计数混乱,导致内存泄漏
2.检测引用(占用)(以谷歌为主):浏览器在空闲时候会依次检测
所有的堆内存,把没有被任何事物占用的内存释放掉,以此来优化
内存
[堆内存如果不用可以手动赋值为null释放]
*/
/*
闭包好不好?
大量应用闭包肯定会导致内存的消耗,但是闭包保护和保存的作用,
在真实开发中我们还是需要的,所以需要学会“合理使用闭包”
闭包应用:
(ECSTACK/EC/AO/VO/SCOPE/SCOPE-CHAIN/释放不释放/垃圾回收机制...)
1.实战用途
2.高阶编程:柯理化/惰性函数/compose函数
3.源码分析:JQ/LODASH/REACT(REDUX/高阶组件/HOOKS)...
4.自己封装插件组件的时候
...
*/
<body>
<button>红</button>
<button>绿</button>
<button>蓝</button>
</body>
</html>
<script>
var arr = ['red', 'green', 'blue']
var buttonList = document.getElementsByTagName('button')
for (var i = 0; i < buttonList.length; i++) {
(function (i) {
buttonList[i].onclick = function () {
var color = arr[i]
document.body.style.backgroundColor = color
}
})(i)
}
</script>