一,什么是闭包,会出现什么问题?如何避免?
1、函数里面包含的子函数,子函数访问父函数的局部变量
2、通过return将子函数暴露在全局作用域,子函数就形成闭包
3、通过闭包,父函数的局部变量没有被销毁,可通过闭包去调用 ,但同时,这个局部变量也不会被全局变量污染。
二、闭包的优点和缺点
优点: 避免全局变量的污染,同时,局部变量没有被销毁,驻留在内存中,还可以被访问
缺点: 使用不当,会造成内存泄露
作用是:通过一系方法,将函数内部的变量(局部变量)转化为全局变量
闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。
三、产生闭包的解决方案
1、修改this指向,通过apply,call,bind方法解决
2、通过箭头函数,将内部普通函数改为箭头函数即可访问外部函数的变量
一,什么是递归,出现什么问题?如何避免?
如果一个函数在内部可以调用其本身,那么这个函数就是递归函数。
简单理解:函数内部自己调用自己, 这个函数就是递归函数
递归很容易发生“栈溢出”错误(stack ),所以必须要加退出条件 return。
递归必须由以下两部分组成。
递归调用的过程。
递归终止的条件。
在没有限制的情况下,递归运算会无终止地自身调用。因此,在递归运算中要结合 if 语句进行控制,
只有在某个条件成立时才允许执行递归,否则不允许调用自身。
可以利用尾递归