1牡彻、js的閉包
function a(){
var i = 0扫沼;
function b(){
alert(i++);
}
return b;
}
var c = a();
c();
執(zhí)行完 var c = a()后,變量c實際指向函數(shù)名b,再執(zhí)行 c()會alert(1)[第一次]缎除,這段代碼創(chuàng)建了一個閉包严就。因為函數(shù)a外的變量引用了函數(shù)a內(nèi)的函數(shù)
當函數(shù)a內(nèi)部的函數(shù)b,被函數(shù)a外的變量引用時器罐,就創(chuàng)建了一個閉包
2盈蛮、閉包的作用
a執(zhí)行完,并返回后技矮,閉包使js的垃圾回收機制GC不會回收a所占用的資源,因為函數(shù)a的內(nèi)部函數(shù)b的執(zhí)行需要依賴a中的變量
- 1殊轴、可讀取函數(shù)內(nèi)部的變量
- 2衰倦、讓這些變量的值適中保持在內(nèi)存中。
3旁理、閉包與this對象
在閉包中使用this對象會導(dǎo)致一些問題樊零,因為匿名函數(shù)的執(zhí)行具有全局性,this通常指向window代碼
把外部作用域的this對象保存在一個閉包能夠訪問的變量里面孽文,就能讓閉包訪問該對象
var name = "The Window"
var object = {
name = "My Object",
getName:function(){
var that = this; //有此語句驻襟,指向My Object,無此語句芋哭,指向The Windwo
return function(){
return that name;
}
}
}
alert(object.getName(){})
4沉衣、Js插件中閉包的應(yīng)用
(function(){
alert("...")
})