关于闭包的输入输出
闭包是一个函数,加上创建函数的作用域的连接。闭包“关闭”了函数的自由变量(自由变量无法垃圾回收)
闭包内部函数可以访问外部函数的局部变量。但是可能会内存泄露
闭包自由变量的查找,是在函数定义的地方,向上级作用域查找。不是在执行的地方。
全局变量其实也相当于是自由变量,系统不会自动回收,不知道什么时候被调用。
//外部其实广义上来说就是个大闭包,s不会被回收 var s = 10 function fun(){ //执行完毕后a被回收 var a = 10 console.log(a) } fun()
function fun(){ var a = 10 //同理,下面闭包也不知道什么时候会调用a,a也是自由变量 return function(){ console.log(a) } } fun()()
函数的闭包输出要注意,函数是在内部还是外部。也就是函数是被以参数传递(外部),还是返回(内部)
函数作为参数被传递:
function print(fn) { const a = 200; fn(); } const a = 100; function fn() { console.log(a); } print(fn); // 100
函数作为返回值被返回:
function create() { const a = 100; return function () { console.log(a); }; } const fn = create(); const a = 200; fn(); // 100