JavaScript 之 闭包

依然范特西╮ 提交于 2019-11-28 08:24:13
  • 概念

    闭包: 闭包函数,表现于作用域,一个函数可以使用别一个函数的变量。

 

  • 例子

    无刷新点赞 核心代码:

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和匿名函数。

      所以,过度使用闭包,会占用内存过多。

  

      

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!