浅浅谈Js闭包
闭包就是能够读取其他函数内部变量的函数。由于在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。 要了解闭包,首先了解函数,函数分为两个阶段。 函数定义阶段: 在内存中开辟一个存储空间 把函数体内的代码当作字符串一摸一样的放在这个空间中,碰到的所有变量都不进行解析 把这个空间地址赋值给函数名(变量名) 函数调用阶段 按照函数名(变量名)找到对应的存储空间 从新开辟一个函数 执行空间 在这个执行空间里面进行形参赋值 在这个执行空间里面进行预解析 把函数存储空间的代码复制一份到执行空间里面执行一遍 执行完毕之后, 这个开辟出来的执行 空间销毁 注意: 每一次函数调用都会开辟一个执行空间 调用一次,开辟一个执行空间,执行完毕代码销毁。 再次调用的时候,再次开辟一个执行空间,执行完毕代码销毁 闭包: function a(){ //这个num变量就是函数a的私有变量 var num = 100; return function b(){ console.log(num); } } //res接受的就是函数a内部返回的一个复杂数据类型(函数b) var res = a(); //res接受的就是函数b的执行空间的地址,就是函数a执行以后的返回值 res() // 当 res 调用的时候, 打印 num // 打印出来的就是 a