闭包(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还在,所以它的上一级函数环境变量都要保存在变量中
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律