匿名函數:沒有名字的函數
閉包:函數里放一個匿名函數
## 匿名函數
~~~
//普通函數
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();
~~~