闭包的理解
1.闭包的概念
1.闭包:就是函数内部嵌套函数
function outer(){
function inner(){
}
}
以上就构成了闭包
经典案例:
function outer(){
let a=10
function inner(){
console.log(a);
}
return inner
}
let fn=outer()
fn()
输出10
2.作用域链
当在js中使用一个变量时,js引擎会优先在当前作用域寻找,如果找不到,就会在上一层作用域寻找,直到全局作用域,如果没找到会返回undefined
以上代码输出10,那outer()执行完毕,a为什么没有被销毁了?这就涉及到垃圾回收机制和闭包的特性了。
3.垃圾回收机制
正常情况下,如果一个函数执行完毕,则其内部的变量会被销毁
闭包的特性:内部函数没有被执行完成,外部函数变量不会被销毁
2.闭包的应用 :封装一段代码
let a=10
let b=20
function add(){
return a+b
}
//如果我这样写,别人可以访问到我的a,和b,就可以修改他,
//那么我们不希望别人可以访问到a,b就需要用到闭包,用函数将他们封装起来
//立即执行函数,定义即执行()()
let module=(function(){
let a = 10
let b = 20
function add() {
return a + b
}
return add
})()
//这样我们就只把add暴露给别人调用,而a,b为局部变量,外部无法调用
module()
这样就利用闭包实现了模块化的概念
本文来自博客园,作者:Kira的学习笔记,转载请注明原文链接:https://www.cnblogs.com/kira2022/p/16102257.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类