- 概念
闭包: 闭包函数,表现于作用域,一个函数可以使用别一个函数的变量。
- 例子
无刷新点赞 核心代码:
window.onload = function(){ function setValue(callback){ var value = 1; return function(){ this.innerHTML = "点赞(" + (value++) + ")"; callback && callback(); } } document.getElementById("btn").onclick = setValue(function(){ console.info("执行与数据据的交互"); // }); }
- 分析
- 《JavaScript高级编程》书中建议:由于闭包会携带包含它的函数的作用域,因为会比其他函数占用更多内容,过度使用闭包,会导致内存占用过多。
- 程序运行时,堆 中 存放具体的值,栈 中 存放具体的程序,变量值为 堆中的地址。
- js有变量自动回收机制,函数运行完时,会释放函数内存。当变量为null时,会自动回收。
执行某个函数时,1. 准备执行环境2. 初始化作用域链和arguments参数对象。作用域链存在,则执行环境没有被销毁。
闭包执行时,其初始化作用域链主函数->getValue->匿名函数,由变量a 贯穿整个作用域链。只有主函数执行完后,会销毁整个作用域链存在的闭包的运行环境,即getValue和匿名函数。
所以,过度使用闭包,会占用内存过多。