闭包(2021.8.14)

学习目标:

  • 理解什么是JS中的闭包
  • 理解闭包的用途和缺点

思考问题

var  num=1;
function  f1(){
		alert(num);
}
f1();

结果:1 函数内部可以直接读取全局变量

function  f1(){
		var  num=1;
}
f1();
alert(num);

错误 在函数外部无法读取函数内的局部变量

前一个例子就是一个闭包,闭包是指函数可以使用函数以外定义的变量

如何在外部读取局部变量?

  • 在函数的内部,在定义一个函数
    • 函数2被包括在1内部,1内部的所有局部变量,对2都是可见的
    • JS特有的“作用域链”结构(父对象的所有变量,对子对象都是可见的,反之则不成立)
  • 把内部函数作为返回值
function  f1(){
		var  num=1;

		function f2(){//在函数的内部,在定义一个函数 
			alert(num);
		}
		return f2;//把内部函数作为返回值
}
var resule=f1();//f1()执行得到的结果就是f2()函数。
resule();//所以执行resule()函数就是执行f2()函数,f2()函数有的作用域链,resule()函数也能同样保留。

理解

执行f1();返回值不是具体值而是子函数f2();
子函数f2还在,所以它的上一级函数环境变量都要保存在变量中

posted @ 2022-04-06 23:52  szmtjs10  阅读(24)  评论(0编辑  收藏  举报