- 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 会被回收 浏览器关闭函数会被回收 函数 + 引用的变量就会形成闭包
来源: http://www.bubuko.com/infodetail-2622071.html