ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
匿名函数:没有名字的函数 闭包:函数里放一个匿名函数 ## 匿名函数 ~~~ //普通函数 function box(){ return 123; } //调用 alert(box()); ~~~ ~~~ //匿名函数 function(){ //单独的匿名函数是无法调用的 return 123; } //把匿名函数赋值给变量 var box = function(){ return 123; }; //调用 alert(box()); ~~~ ~~~ //通过表达式自我执行匿名函数 语法:(匿名函数)(); (function(){ return 123; })(); //把匿名函数的返回值赋给变量 var box =(匿名函数)(); ~~~ ~~~ //自我执行的匿名函数传参 (function(age){ alert(age); })(100); ~~~ ~~~ function box(){ return function(){ //闭包 return 123; } } alert(box()()); var b=box(); alert(b()); ~~~ ## 闭包 闭包可以把局部变量驻留在内存中,私有的封装的局部变量,因此也需要销毁 使用匿名函数,实现变量驻留内存中,实现累加 ~~~ function box(){ var age=100; return function(){ age++; return age; } } var b=box(); alert(b()); //101 alert(b()); //102 alert(b()); //103 b=null; //解除引用,等待垃圾回收 ~~~ 闭包里面的this指向window 强制改变this作用域,var that=this; return that.user; ### 模仿块级作用域,私有作用域 自我执行 的匿名函数,能起到私有作用域的效果 ~~~ fucntion box(){ (fuction(){ //此处的I只会在匿名函数外面就失效 for(var i=0;i<5;I++){ ................. } })(); } ~~~ ### 私有变量 设置接口,访问对象里面的私有属性和方法 ~~~ function Box(){ this.age=100; //公有属性 this.run=function(){ //公有方法 return 123; } } var box =new Box(); alert(box.age); ~~~ ~~~ functoin Box(){ var age=100; //私有变量 function run(){ //私有函数 return 123; } this.publicGo=function(){ //对外接口,特权方法 return age+run(); } } var box=new Box(); alert(box.age);//无法调用 box.publicGo(); ~~~