一.js閉包理解
閉包的三大特點為:
1、函式巢狀函式
2、內部函式可以訪問外部函式的變數
3、引數和變數不會被**。
好了閉包就學完了,就這麼簡單。
那麼你一定很迷 接下來才是重點
常見的寫法
1.
//第1種寫法function circle(r)
circle.pi = 3.14159;
circle.prototype.area = function()
var c = new circle(1.0);
alert(c.area());
2.
//第2種寫法var circle = function()
return obj;
}
var c = new circle();
alert( c.area( 1.0 ) );
3.
//第3種寫法var circle = new object();
circle.pi = 3.14159;
circle.area = function( r )
alert( circle.area( 1.0 ) );
4.
//第4種寫法var circle=
};
alert( circle.area(1.0) );
二.閉包的作用
1、能夠訪問區域性變數或者方法
var fn = function()}var b = fn();
setinterval(function(),30)
2、在for迴圈中可以保留i的值
(重要的面試題)!!!
var ali = document.getelementbyid("list").getelementsbytagname("li");for(var i=0;i(function(a)
})(i)
}
三.垃圾**機制
原理理解:
當乙個函式內部的一些方法或者屬性沒有在全域性進行呼叫的時候,當前函式執行完畢以後就會被**,下次在呼叫當前函式的時候函式內部的方法和屬性都會被重置,如果乙個函式的一些方法和屬性在全域性進行呼叫了,那麼當前函式不會被銷毀,下次在呼叫當前函式的時候裡面的方法和屬性不會進行重置。
簡單的說就是不管你在外面哪個城市裡面拼搏,只要一通你和你爸一通**(函式執行),你爸永遠都會在在家等你回去,哪怕你窮困潦倒,身無分文。
我想你一定理解了......
四.閉包的好處和壞處
好處1.匿名自執行函式(比如ui的初始化,那麼我們可以使用閉包)
var datamodel =};
(function(dm)
}
})(datamodel);
2.快取
var cachedsearchbox = (function(),count = ;
return
var fsb = new uikit.webctrl.searchbox(dsid);//新建
cache[dsid] = fsb;//更新快取
if(count.length > 100)
returnfsb;
},
clearsearchbox : function(dsid)
}
};
})();
3 實現封裝
var person = function(),setname : function(newname)
}
}();
print(person.name);//直接訪問,結果為undefined
print(person.getname());
person.setname("abruzzi");
print(person.getname());
得到結果如下:
undefined
default
abruzzi
4.物件導向
function person(),setname : function(newname)
}
};
var john = person();
print(john.getname());
john.setname("john");
print(john.getname());
var jack = person();
print(jack.getname());
jack.setname("jack");
print(jack.getname());
執行結果如下:
default
john
default
jack
參考:壞處1.記憶體消耗
於閉包引用另外乙個函式的活動物件,因此這個活動物件無法被銷毀,這意味著,閉包比一般的函式需要更多的記憶體消耗
2.效能問題
使用閉包時,會涉及到跨作用域訪問,每次訪問都會導致效能損失。
四.單例模式
未完待續。。。
一分鐘理解js閉包
什麼是閉包?先看一段 function a inc inc a 控制台輸出1,再輸出2 簡單吧。再來看一段 function a var c new a c.inc 控制台輸出1 c.inc 控制台輸出2 簡單吧。什麼是閉包?這就是閉包!有權訪問另乙個函式作用域內變數的函式都是閉包。這裡 inc 函...
一分鐘學會 docker
標題黨,其實僅僅是 docker 的發布而已。檢視當前執行的 docker docker ps a 停止 docker docker stop 容器 id 或者 tag 移除 docker docker rm 容器 id 檢視所有映象 docker images 移除映象 docker rmi 例如...
一分鐘sed入門(一分鐘系列)
1.簡介 sed是一種行編輯器,它一次處理一行內容。2.sed呼叫方式 sed options command file s sed options f scriptfile file s 第一種直接在命令列中執行,第二種把命令寫到了指令碼中,二者無本質區別。示例 1 列印hello.txt的內容 ...