[javascript] 看知乎学习js闭包

知乎:到底什么是闭包?html

 

寸志:前端

JavaScript 闭包的本质源自两点,词法做用域和函数看成值传递。node

 

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

 

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数据结构和算法

我一直这么以为,面试面的问题,并非单纯的去回答一个答案,好比闭包这个问题来讲,什么是闭包,你们均可以巴拉巴拉说出来,可是从每一个人回答的方式,是能够看出一些思考方式和思惟模式而且能够按照这个深刻下去。ide

 

因此我以为闭包是一个很好的面试问题,我就遇到过不少不少回答方式:

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

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

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

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

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

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

 

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

 

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

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

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

相关文章
相关标签/搜索