闭包面试题原题

article/2025/6/28 2:19:17

图片描述

闭包面试题原题

function fun(n, o) { // ① console.log(o);return { // ② fun: function(m) { // ③ return fun(m, n); // ④ }};
}// 第一个例子
var a = fun(0); // 返回undefined
a.fun(1); // 返回 ?
a.fun(2); // 返回 ?
a.fun(3); // 返回 ?// 第二个例子
var b = fun(0).fun(1).fun(2).fun(3); //undefined,?,?,?// 第三个例子
var c = fun(0).fun(1);
c.fun(2);
c.fun(3); //undefined,?,?,?

一、关于这个函数的执行过程

先大致说一下这个函数的执行过程:

① 初始化一个具名函数,具名函数就是有名字的函数,名字叫 fun。

② 第一个 fun 具名函数执行之后会返回一个对象字面量表达式,即返回一个新的object对象。

{ // 这是一个对象,这是对象字面量表达式创建对象的写法,例如{a:11,b:22}
fun: function(m) {

return fun(m, n); 

}
}
③ 返回的对象里面含有fun这个属性,并且这个属性里面存放的是一个新创建匿名函数表达式function(m) {}。

④ 在③里面创建的匿名函数会返回一个叫 fun 的具名函数return fun(m, n);,这里需要说明一下这个 fun 函数返回之后的执行过程:

  1. 返回 fun 函数,但默认不执行,因为在 js 里面,函数是可以保存在变量里面的。
  2. 如果想要执行 fun 函数,那么首先会在当前作用域寻找叫fun 名字的具名函数,但是因为当前作用域里 fun 名字的函数是没有被定义的,所以会自动往上一级查找。
    2.1 注解:当前的作用域里是一个新创建的对象,并且对象里面只有 fun 属性,而没有 fun 具名函数
    2.2 注解:js 作用域链的问题,会导致他会不断地往上级链查找。
  3. 在当前作用域没找到,所以一直往上层找,直到找到了顶层的 fun函数,然后执行这个顶层的 fun 函数。
  4. 然后这两个 fun 函数会形成闭包,第二个 fun 函数会不断引用第一个 fun 函数,从而导致一些局部变量例如 n,o 得以保存。

所谓闭包:各种解释都有,但都不是很接地气,简单的来说就是在 js 里面,有一些变量(内存)可以被不断的引用,导致了变量(内存)没有被释放和回收,从而形成了一个独立的存在,这里涉及了js 的作用域链和 js 回收机制,结合两者来理解就可以了。


http://chatgpt.dhexx.cn/article/7THfDZZm.shtml

相关文章

必会的闭包面试题

百度百科摘要:   闭包就是能够读取其他函数内部变量的函数。例如在 JavaScript 中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁…

JS闭包 经典面试题

面试题 先看题目代码: function fun(n,o) {console.log(o)return {fun:function(m){return fun(m,n);}}; } var a fun(0); a.fun(1); a.fun(2); a.fun(3);//undefined,?,?,? var b fun(0).fun(1).fun(2).fun(3);//undefined,?,?,? var c fun(0).fun(1…

分享 10 个 JS 闭包面试题(图解),进来看看你能答对多少

英文 | https://betterprogramming.pub/10-javascript-closure-challenges-explained-with-diagrams-c964110805e7 翻译 | 杨小爱 闭包是函数式编程中的核心概念之一,是每个 JavaScript 开发人员必备的知识。在这里,我准备了 10 个关于闭包的面试挑战题&…

图解JavaScript闭包面试题

由于最近在学习关于闭包相关的知识,并且闭包这个知识点让我有点搞不太清楚其具体的定义,所以在网上也查阅了很多大佬的讲解和对闭包的一个定义。 最后感觉还是MDN上的说法感觉比较好理解一些,对闭包还是不太理解的道友可以尝试看一看。 MDN上…

10 个用图表解释JavaScript 闭包的面试题

英文 | https://betterprogramming.pub/10-javascript-closure-challenges-explained-with-diagrams-c964110805e7 翻译 | 杨小爱 闭包是函数式编程中的核心概念之一,是每个 JavaScript 开发人员必备的知识。在这里,我准备了 10 个关于闭包的面试挑战题&…

面试题-闭包

目录 什么是闭包? 闭包的产生 闭包中的变量 自动形成的闭包与内存占用 手动形成闭包 闭包的优点/特点 对闭包的小结: 闭包经典面试题一 闭包基础面试题二 闭包经典面试题三 闭包经典面试题四 真题解答 需要先掌握的知识 1.javascript中的作用域与…

关于闭包的7道面试题

每个JavaScript开发人员都必须知道闭包是什么。在JavaScript编码面试中,闭包经常被问及。 本文整理了一份关于JavaScript 闭包的 7 个有趣且难度递增的问题的清单。 拿一支铅笔和一张纸,试着在不看答案或运行代码的情况下回答问题。可能需要大约 30 分钟…

闭包中常见的面试题

1、声明函数 最普通最标准的声明函数方法,包括函数名及函数体。 function fn1(){} 2、创建匿名函数表达式 创建一个变量,这个变量的内容为一个函数 var fn1function (){} 注意采用这种方法创建的函数为匿名函数,即没有函数name var fn1…

闭包及闭包经典面试题

理解:什么是闭包? 1.密闭的容器,类似set/map容器,用来存储数据 2.闭包是一个对象,存放数据的格式:key:value 闭包形成的条件 1.函数嵌套 2.内部函数引用外部函数 function fun(){var count 1;functi…

css js写在一起 vue_问题记录(关于css、js、Vue、ES6)

一.css样式问题 1.一行省略以及多行省略问题 一行省略样式: width: 200px; // 必须是定宽 overflow: hidden; // 超出隐藏 text-overflow: ellipsis; // 隐藏部分用省略号代替 white-space: nowrap; // 文本内容不换行(默认在定宽的情况下换行) 多行省略样式: width: 200px; //…

React基础语法学习

React主要有如下3个特点: 作为UI(Just the UI)虚拟DOM(Virtual DOM):这是亮点 是React最重要的一个特性 放进内存 最小更新的视图,差异部分更新 diff算法数据流(Date Flow)单向数据流 学习Re…

class语法糖,尝尝嘛~~

语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得约翰兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更…

一种小型后台管理系统通用开发框架中的Cache缓存设计 ES6学习笔记 探秘 flex 上下文中神奇的自动 margin...

一种小型后台管理系统通用开发框架中的Cache缓存设计 本篇博客记录一下我在实习的公司的后台管理系统开发框架中学习到的一种关于网站的缓存(Cache)的实现方法,我会在弄懂的基础上,将该方法在.net core上进行实现。因为公司开发都…

前端综合笔记-JavaScript-CSS-HTML-VUE-ES6-Typescript-axios浏览器与web安全 --从入门到入坟

文章为个人整合的笔记,并无商业用途 点进来之后你的噩梦就要来了,接下来是我从业以来整理的一些基础与难点(多数来源于阅读文章与实践中遇到的问题),如果你 是个小白: 推荐使用2~3周的时间来消化接下来的内容, 遇到不…

flex布局应用与踩坑

一、预告 本文不是一篇入门的文章所有请符合以下条件的战斗人员绕道: 1、初学前端,对前端的传统布局还不是很熟悉的人 2、后端人员对前端不打算深入学习的同学 二、开篇 flex布局原本是好几个月前就一直想学习的东西,当时flex布局还算是比较新…

前端面试+学习笔记(HTML+CSS+JavaScript+ES6+Vue+NodeJs)

前端面试学习笔记(HTMLCSSJavaScriptES6VueNodeJs) 一. HTML 1. 盒子模型 是什么:每个元素被表示为一个矩形的盒子,有四个部分组成:内容(content)、内边距(padding)、边…

ReactNative基础篇(1)语法、布局、组件通信

•1.1语法 •ES6语法:ECMAScript6.0(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了。它的目标,是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言 •参考网…

HTML/CSS/JS 基本语法

前端 一、HTNL1、文件结构2、文本标签&#xff08;1&#xff09;块元素&#xff1a;div&#xff08;2&#xff09;行内元素&#xff1a;span&#xff08;3&#xff09;格式标签 3、图片、音频、视频&#xff08;1&#xff09;图片&#xff08;2&#xff09;音频< audio >…

flex 弹性布局

阮一峰的网络日志 首页 档案 上一篇&#xff1a;ES6 的功能侦测库 下一篇&#xff1a;Flex 布局教程&#xff1a;实 分类&#xff1a; 开发者手册 Flex 布局教程&#xff1a;语法篇 作者&#xff1a; 阮一峰 日期&#xff1a; 2015年7月10日 感谢 腾讯课堂NEXT学院 赞助本站&…

前端可能问到的面试题(ts,js,css,es6)

1.void,null,undefined&#xff0c;never,NaN void:无返回值&#xff0c;只能赋值undefined和null null:空值&#xff0c;表示不存在 undefined&#xff1a;未定义&#xff0c;声明了但没有赋值&#xff0c;对象没有赋值的属性&#xff0c;对象没有返回值 never&#xff1a;永…