匿名函數閉包
(function(){
console.info("111111111");
})();函數
var my = (function(){
return "11111111";
})();this
函數裏放匿名函數叫閉包spa
function my(){
return function(){
return "張三";
}
}
console.info(my()());code
閉包的優勢,避免使用全局變量,提供訪問局部變量對象
//把局部變量保存起來
function box(){
var age = 100;
return function(){
age++;
return age;
}
}
var b = box();
b();
b();
b();blog
function box1 (){
var arr = [];
for(var i=0;i<5;i++){
arr[i] = (function (num){
return num;
})(i)
}
return arr;
}作用域
var my = function(){
return "11111111";
}();get
閉包在全局是指向window,io
var name ="全局";
var user ={
name:"張三",
getUser:function(){
var that = this;
return function(){
return that.name;//返回user對象的屬性,而不是全局
}
}
}
塊級做用域,(function(){
})();
function box(){ var arr = []; for (var i=0;i<5;i++) { arr[i] = (function(num){ //有時arr[i] 須要通過函數複雜計算,閉包的用處 return num; })(i); } return arr; }
閉包this指向window
var name = "window"; var box = { name:"box", getName: function(){ //這裏的做用域指向box var that = this; return function(){ //這裏的做用域指向window return that.name; } } } alert(box.getName()());
var name1 = "1212"; (function(){ var name1 = "張三" alert(this.name1);//指向window })();
//塊級做用域,變成私有做用域
function Box(){ var name = "張三";//私有變量外部沒法訪問 function eat(){//私有方法外部沒法訪問 return "吃飯"; } this.run = function(){//公有方法共外部調用 return name +eat(); } }