js高级-闭包

function foo(x){

  var tmp = 3;

  return function(y){  //把一个函数作为返回值,定义时候的作用域

    console.log(x+y+(++tmp))  //++tmp先自加再参与表达式运算

  }

}

var bar = foo(2)    //此时bar指向了匿名函数,匿名函数又指向了 x,tmp两个变量 bar就是一个闭包(匿名函数加x,tmp两个父级变量)

bar(10)  //16

bar(20)  //27 此时函数执行完成后里面的变量没有回收掉 所以tmp还是4 然后++tmp就是5 x还是2 y就是20 (只要bar没有释放里面的变量就不会回收 。关闭浏览器才会释放)

function d(){

  var a = 10;

  console.log(a)

}

d();  //执行完成后 a会被回收 浏览器关闭函数会被回收  函数+引用的变量就会形成闭包

猜你喜欢

转载自www.cnblogs.com/suanmei/p/9104164.html