function a(){ var num = 0; function b(){ num++; console.log(num) } return b; } var demo = a(); demo();//打印第一次1 demo();//打印第二次2 a执行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;