要理解閉包,首先必須理解Javascript特殊的變量作用域。
變量的作用域無非就是兩種:全局變量和局部變量。
Javascript語言的特殊之處,就在于函數內部可以直接讀取全局變量
注意:
1.在函數外部自然無法讀取函數內的局部變量。
2.函數內部聲明變量的時候,一定要使用var命令。如果不用的話,你實際上聲明了一個全局變量!
代碼示例
<!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);報錯,外部不噩夢訪問函數內部已定義的變量
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>
三、閉包的概念
各種專業文獻上的“閉包”(closure)定義非常抽象,很難看懂。我的理解是,閉包就是能夠讀取其他函數內部變量的函數。
由于在Javascript語言中,只有函數內部的子函數才能讀取局部變量,因此可以把閉包簡單理解成“定義在一個函數內部的函數”。
所以,在本質上,閉包就是將函數內部和函數外部連接起來的一座橋梁。