首页 技术 正文
技术 2022年11月8日
0 收藏 913 点赞 1,416 浏览 1183 个字

知乎:到底什么是闭包?

寸志:

JavaScript 闭包的本质源自两点,词法作用域和函数当作值传递。

词法作用域,就是,按照代码书写时的样子,内部函数可以访问函数外面的变量。引擎通过数据结构和算法表示一个函数,使得在代码解释执行时按照词法作用域的规则,可以访问外围的变量,这些变量就登记在相应的数据结构中。

var x=23333;function test(){    alert(x);}test(); //弹出23333

函数当作值传递,即所谓的first class对象。就是可以把函数当作一个值来赋值,当作参数传给别的函数,也可以把函数当作一个值 return。一个函数被当作值返回时,也就相当于返回了一个通道,这个通道可以访问这个函数词法作用域中的变量,即函数所需要的数据结构保存了下来,数据结构中的值在外层函数执行时创建,外层函数执行完毕时理因销毁,但由于内部函数作为值返回出去,这些值得以保存下来。而且无法直接访问,必须通过返回的函数。这也就是私有性。

function test(){    var x=23333;    function test2(){       alert(x);    }    return test2;}test()();//弹出23333

本来执行过程和词法作用域是封闭的,这种返回的函数就好比是一个虫洞,开了挂。test2就是个闭包函数。显然,闭包的形成很简单,在执行过程完毕后,返回函数,或者将函数得以保留下来,即形成闭包。实际上在 JavaScript 代码中闭包不要太常见。

函数作为第一等对象之后 JavaScript 灵活得不要不要的。

知乎:为何前端面试官都喜欢问闭包?

niko

我一直这么觉得,面试面的问题,并不是单纯的去回答一个答案,比如闭包这个问题来说,什么是闭包,大家都可以巴拉巴拉说出来,但是从每个人回答的方式,是可以看出一些思考方式和思维模式并且可以按照这个深入下去。

所以我觉得闭包是一个很好的面试问题,我就遇到过很多很多回答方式:

闭包就是一个函数内部可以访问函数外部的现象表述;

闭包就在于函数内部可以直接读取全局变量;

闭包是很多语言都具备的特性,在js中,闭包主要涉及到js的几个其他的特性:作用域链,垃圾(内存)回收机制,函数嵌套,等等,然后会跟你扯一堆;

还有的人说不清楚闭包是什么,但是他们会要求直接给你写代码;

遇到些看起来水平很高的人,被问到闭包的时候往往很不削,一般就一句话的回答:是语言作用域的问题之类的

没错,前端都发展到现在这个阶段了,再去问“闭包”,显得有点“落后”,node、mv*框架、数据可视化、移动无线应用等等,现在前端该问的问题太多。

不过就算世界怎么发展,闭包这个问题我觉得还是可以问的,能反映出思考方法和模式的问题就是好问题。

没有low的问题,只有low的理解

没有简单的问题,只有简单的认知

最看不惯遇到大神点赞的人,玉伯说什么了就那么多赞,追星么你们是…

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,492
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,494
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,132
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,295