要理解閉包,首先必須理解Javascript特殊的變量作用域捆探。
變量的作用域無非就是兩種:全局變量和局部變量甸昏。
Javascript語言的特殊之處,就在于函數(shù)內(nèi)部可以直接讀取全局變量
注意:
1.在函數(shù)外部自然無法讀取函數(shù)內(nèi)的局部變量徐许。
2.函數(shù)內(nèi)部聲明變量的時(shí)候施蜜,一定要使用var命令。如果不用的話雌隅,你實(shí)際上聲明了一個(gè)全局變量翻默!
代碼示例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script type="text/javascript">
//閉包
var num1 = 5;
function testFn1() {
var num2 = 10;
//console.log(num3);報(bào)錯(cuò)缸沃,外部不噩夢訪問函數(shù)內(nèi)部已定義的變量
function Fn2() {
var num3 = 20;
return num1 + num2 + num3;
}
return Fn2();
}
function testFn2() {
var a = testFn1();
var b = 10;
console.log(a+b);//45
}
testFn2();
</script>
</body>
</html>
三、閉包的概念
各種專業(yè)文獻(xiàn)上的“閉包”(closure)定義非常抽象修械,很難看懂趾牧。我的理解是,閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)肯污。
由于在Javascript語言中翘单,只有函數(shù)內(nèi)部的子函數(shù)才能讀取局部變量,因此可以把閉包簡單理解成“定義在一個(gè)函數(shù)內(nèi)部的函數(shù)”蹦渣。
所以哄芜,在本質(zhì)上,閉包就是將函數(shù)內(nèi)部和函數(shù)外部連接起來的一座橋梁柬唯。