扫码关注公众号

前端JS语言之闭包相关
12-11
301观看
01

下列关于闭包描述正确的是?( )

正确答案是AC逻辑上立即执行函数可以理解为:声明闭包函数-执行-释放内存闭包内变量要到整个闭包被清除的时候才会清除

来自:JavaScript语言-闭包相关
02

什么是闭包,如何使用它,为什么要使用它?

就是能够读取其他函数内部变量的函数。由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。使用闭包的注意点:由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(PublicMethod),把内部变量当作它的私有属性(privatevalue),这时一定要小心,不要随便改变父函数内部变量的值。

来自:JavaScript语言-闭包相关
03

什么是js的闭包?有什么作用,用闭包写个单例模式

MDN对闭包的定义是:闭包是指那些能够访问自由变量的函数,自由变量是指在函数中使用的,但既不是函数参数又不是函数的局部变量的变量,由此可以看出,闭包=函数+函数能够访问的自由变量,所以从技术角度讲,所有JS函数都是闭包,但是这是理论上的闭包,还有一个实践角度上的闭包,从实践角度上来说,只有满足1、即使创建它的上下文已经销毁,它仍然存在,2、在代码中引入了自由变量,才称为闭包闭包的应用:1、模仿块级作用域2、保存外部函数的变量3、封装私有变量单例模式:varSingleton=(function(){varinstance;varCreateSingleton=function(name){this.name=name;if(instance){returninstance;}//打印实例名字this.getName();//instance=this;//returninstance;returninstance=this;}//获取实例的名字CreateSingleton.prototype.getName=function(){console.log(this.name)}returnCreateSingleton;})();//创建实例对象1vara=newSingleton('a');//创建实例对象2varb=newSingleton('b');console.log(a===b);

来自:JavaScript语言-闭包相关
04

关于闭包,下列说法正确的是?

正确答案是CDC语言本身并不支持闭包代码回收规则如下:1.全局变量不会被回收。2.局部变量会被回收,也就是函数一旦运行完以后,函数内部的东西都会被销毁。3.只要被另外一个作用域所引用就不会被回收

来自:JavaScript语言-闭包相关
05

垃圾回收机制(闭包的延伸)

js拥有特殊的垃圾回收机制,当一个变量在内存中失去引用,js会通过特殊的算法将其回收,并释放内存。分为以下两个阶段:标记阶段:垃圾回收器,从根对象开始遍历,访问到的每一个对象都会被标示为可到达对象。清除阶段:垃圾回收器在对内存当中进行线性遍历,如果发现该对象没有被标记为可到达对象,那么就会被垃圾回收机制回收。这里面牵扯到了引计数法,每次引用都被会‘➕1’如果标记清零,那么就会被回收掉。

来自:JavaScript语言-闭包相关
课程
专栏
js语言和框架-JavaScript语言-闭包相关
3专栏
1课程
5 试题