function a(){ var num = 0; function b(){ num++; console.log(num) } return b;}var demo = a();demo();//打印第一次1demo();//打印第二次2a执行b定义,并被保存下来闭包通俗讲就是:内部函数通过return保存在外部了,闭包会导致原有作用域链不释放,造成内存泄漏。闭包的作用:1.实现公有变量;2.可以做缓存(存储机制);3.可以实现封装,属性私有化;4.模块化开发,防止污染全局变量;function test(){ var num = 10; function a(){ num++; console.log(num); //11 } function b(){ num--; console.log(num); //10 } return [a,b];}var myArr = test();myArr[0]();myArr[1]();缓存例子效果;function a(){ var list = ""; var obj = { b:function(){ console.log(111) list = ""; }, push:function(){ list = myList; } } return obj;}var demo = a();demo.push("bob");demo.a();立即执行函数:执行后被释放;适合初始化工作。(function(){}());//w3c推荐第一种;(function(){})();传参是一样的,也一样有返回值;如:var num =(function(a,b,c){ var d = a+b+c return d;}(1,2,3))num = 6;