1:
閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。
這種寫法就可以獲取到函數(shù)內(nèi)部的局部變量,b函數(shù)就是閉包
function a(){
var n=9;
function b(){
alert(n)
}
return b;
}
var num=a();
num();
2:閉包的用途
閉包可以用在許多地方。
它的最大用處有兩個(gè),一個(gè)是前面提到的可以讀取函數(shù)內(nèi)部的 變量,
另一個(gè)就是讓這些變量的值始終保持在內(nèi)存中。
3:閉包的缺點(diǎn):
使用閉包的注意點(diǎn) 由于閉包會(huì)使得函數(shù)中的變量都被保存在內(nèi)存中,
內(nèi)存消耗很大,所以不能濫用閉包,
否則會(huì)造成網(wǎng)頁的性能問題,
在 IE 中可能導(dǎo)致內(nèi)存泄露。
解決方法是,在退出函數(shù)之前,
將不使用的局部變量全部刪除。
閉包會(huì)在父函數(shù)外部,改變父函數(shù)內(nèi)部變量的值。
所以,如 果你把父函數(shù)當(dāng)作對象(object)使用,
把閉包當(dāng)作它的公用方法(Public Method),
把 內(nèi)部變量當(dāng)作它的私有屬性(private value),
這時(shí)一定要小心,不要隨便改變父函數(shù)內(nèi) 部變量的值。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
</body>
<script type="text/javascript">
// 1:閉包函數(shù)
// 2:閉包函數(shù)的作用
// 2.1想獲取函數(shù)中的局部變量,那么久要用到閉包函數(shù)
// 2.2另一個(gè)就是讓這些變量的值始終保持在內(nèi)存中
//獲取局部變量的案例
// function a(){
// var n=9;
// function b(){
// return n;
// }
// return b();
// }
// var c=a();
// alert(c)
//變量始終保存中內(nèi)存中
// function fun(){
// var n=9;
// a=function(){
// n+=1;
// }
// function f2(){
// alert(n);
// }
// return f2;
// }
// var sum=fun();
// sum();//9
// a();
// sum();//10
// a();
// sum();//11
// a();
// sum();//12
// function fun(){
// var n=9;
// a=function(){
// n+=1;//n=n+1;
// }
// function f2(){
// alert(n);//9 10
// }
// return f2;
// }
// var sum=fun();
// sum();
// sum();
// sum();
// sum();
////1:第一種形式
// function fun(){
// var n=9;
// function sum(){
// alert(n)
// }
// return sum;
// }
// var c=fun();
// c();
//2:第2種形式
// function fun(){
// var n=119;
// function sum(){
// function dd(){
// alert(n)
// }
// return dd;
// }
// return sum;
// }
// fun()()();
function a(){
var b=2;
function c(){
alert(b);
}
return c;
}
a()
</script>
</html>