<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
</body>
<script>
//闭包:
//广义上:每一个函数都一个独立的作用域,闭包的本意就是封闭包裹,作用域正好体现了封闭包裹的意思,所以认为每一个函数都是一个闭包
//狭义上:如果某个函数可以访问到其他函数中声明的变量,我们认为这个函数是一个闭包函数
function f1(){
var obj= {};
return function(){
return obj;
}
}
//以上代码,从狭义上来说,只有内层函数才是闭包函数
function f2(){
var name="abc";
var age=20;
var gender="男";
return function(){
age++;
// console.log(name);
console.log(age);
// console.log(gender);
}
}
var func=f2();//产生执行环境:#f1 #f1中产生变量name,age,gender
func();//21 #f1中创建的变量,找到它,发现age的值:20 age++ -->age:21
func();//22 #f1中创建的变量,找到它,发现age的值:21 age++ -->age:22
var func2=f2();//产生执行环境:#f2 #f1中产生变量name,age=20,gender
func2();//21 age是#f2中创建的变量
func2();//22
func2();//23
</script>
</html>