关于闭包的输入输出

闭包是一个函数,加上创建函数的作用域的连接。闭包“关闭”了函数的自由变量(自由变量无法垃圾回收

闭包内部函数可以访问外部函数的局部变量。但是可能会内存泄露

闭包自由变量的查找,是在函数定义的地方,向上级作用域查找。不是在执行的地方

 

全局变量其实也相当于是自由变量,系统不会自动回收,不知道什么时候被调用。

 

//外部其实广义上来说就是个大闭包,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

 

posted @ 2022-03-20 11:07  Jacky02  阅读(93)  评论(0编辑  收藏  举报