当前位置: 首页 > news >正文

每日一题:请解释什么是闭包(Closure)?并举一个实际的例子来说明。(前端初级)

今天继续在前端初级笔试题中被AI虐:

碱面的答案,问题:初级,回答:初级icon-default.png?t=N7T8https://bs.rongapi.cn/1702510598371151872/14我的回答如下:

闭包是指由大括号包裹的一个区域,这个区域代表了一个变量生效返回,javascript比较特别之处是var定义的变量会扩大到最上层函数的统一闭包中,而let定义的函数则只在当前闭包中生效,如果在闭包中定义了函数,则函数的闭包是定义函数的闭包,不止包括函数体本身 这是一个闭包的例子

function TestClosureJS(){ var name = "hello world"var fn = function(){ return function(){ console.log("name:", name) } } fn()() 
}

闭包其实是个常见的概念,围绕函数定义而来,

闭包是一个函数以及它所创建的环境的组合。这个环境包括了函数内部声明的变量,以及该函数可以访问的外部作用域中的变量。这意味着函数可以“记住”它被创建时的上下文,即使它在其他地方执行也能够访问到这些变量。

其实我个人觉得我答的也没问题,这个解释其实隐含一个逻辑,就是函数变量其实也是一个变量,当你定义一个变量时,他当然会和其他一起的变量共享一个上下文。

function TestClosureJS(){ var name = "hello world"var fn = function(){ return function(){ console.log("name:", name) } } fn()() 
}

比如上面这个闭包,其实他本质上来源昨天的上下文概念,是因为fn这个变量和name变量共享了上下文,导致了fn内部也可以访问name。

可能闭包这个概念是专门为函数中这种情况所做的特殊定义,而我的回答跳过了这个部分,导致的问题吧。

另外,闭包会跟随外部变量的值的更新而刷新值,比如稍作修改上面的代码

function TestClosureJS(){var name = "hello world"var fn = function(){return function(){console.log("name:", name)}}name = "bye";fn()()
}

会打印

name: bye

* 参考文档:闭包 - JavaScript | MDN (mozilla.org)

我做的笔试还有19个免费名额,可以在这获取:

前端初级20题icon-default.png?t=N7T8https://bs.rongapi.cn/1702510598371151872

http://www.lryc.cn/news/171836.html

相关文章:

  • 广告主必看!NetMarvel五大优势驱动出海App投放增长
  • 数据结构与算法之复杂度
  • ATECLOUD电源测试软件平台如何测试电源纹波?
  • 数据结构与算法:排序算法(2)
  • 1_图神经网络GNN基础知识学习
  • 瑞芯微:基于RK3568的ocr识别
  • C++真的是 C加加
  • java学习--day5 (java中的方法、break/continue关键字)
  • MFC主框架和视类PreCreateWindow()函数学习
  • for forin forof forEach map区别
  • 特殊时间(蓝桥杯)
  • VUE路由与nodeJS环境搭建
  • 抗锯齿的线
  • 如何使用高压放大器驱动高容性负载
  • kubernetes集群证书过期启动失败问题解决方法
  • nvm使用的注意事项和常用命令。
  • 代码大全阅读随笔(七)
  • 用户与权限管理
  • mysql集群使用nginx配置负载均衡
  • 蓝桥杯每日一题2023.9.21
  • 知识联合——函数指针数组
  • 【Nginx26】Nginx学习:日志与镜像流量复制
  • Stability AI发布基于稳定扩散的音频生成模型Stable Audio
  • 华为OD机试 - 计算面积 - 逻辑分析(Java 2023 B卷 100分)
  • Ganache本地测试网+cpolar内网穿透实现公网访问内网
  • 【每日一题】ARC071D - ### | 前缀和 | 简单
  • (Vue2)VueRouter
  • 6.文本注释方法
  • [Linux打怪升级之路]-缓冲区
  • 【力扣】13. 罗马数字转整数