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…