匿名函数:没有名字的函数
闭包:函数里放一个匿名函数
## 匿名函数
~~~
//普通函数
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();
~~~