閉包
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>閉包</title>
</head>
<body>
<script>
// 當函數可以記住並訪問所在的詞法作用域,即使函數是在當前詞法作用域之外執行,這時就產生了閉包
// var o = {
// fun: function(){
// console.log(fun); // fun is not defined
// }
// }
// o.fun();
var fn = function(){
console.log(fn);
}
console.log(fn);
function fun(n,o){
console.log(o);
return{
fun:function(m){
return fun(m,n); // 保持着對局部變量n的引用 第一次調用時爲0 m同理 第一次爲1
}
}
}
var a = fun(0); // undefined 調用fun(0); 返回對象 該對象保持着對局部變量n,o的引用 此時n是0,o是undefined
a.fun(1); // 0 a.fun(1) 執行fun() 此時的n因爲閉包持有 值爲0 打印爲0
a.fun(1).fun(2);
</script>
</body>
</html>