javascript:闭包
-
作用域
JS不支持{}块级作用域,只有函数能形成作用域
但是JS可以用let代替var创建变量模拟块级作用域
if(1){ let a = 1; } console.log(a); -
闭包
形成条件:嵌套函数,内部函数访问外部变量
在函数内形成作用域,声明的变量不可被外部访问,而内部创建函数可以访问,再把函数返回出去,利用闭包避免变量全局污染
function outer(){ var a = 1; function inner(){ a++; console.log(a); } return inner; } var count = outer(); count(); console.log(a); //会报错 保护了a变量- 垃圾回收
闭包会出现一个问题,网页不刷新退出,如上例,inner函数和a变量会一直占用内存。
JS有个垃圾回收机制,如果有对象或者变量获取不到了,机制会自动回收释放,如上例,如果要释放内存需要调用count = null;

浙公网安备 33010602011771号