读js高级程序有感---js干货

132 阅读2分钟

不能说现在的百度或者谷歌的答案有错还是什么,不过当你看网络上面的快餐无法解决的时候个人觉得其实去书上看会应该会有一番收货,好了上干货

js闭包:我想这个问题很多家公司的面试初级或者中级的时候都会或多或少的提及这个闭包的问题 首先概念:有权访问另一个函数作用域中的变量的函数 OK这时候我想第一阅读到这个概念的多少会有点迷糊,另一个函数作用域??? 函数???? 原理:首先要明白一个东西作用域链 明白这个之前需要一些理解一些其他必须的概念 执行环境(现在我们一般简称为环境):执行环境定义了变量或者函数有权访问的其他数据 每个环境都有一个关联的变量对象,变量对象就是存储着环境里面的变量和函数举个例子就是 按照我的理解就是给每个人划分了一个权力范围,类似皇上和百官一样,举个例子大家应该用js经常就是听到一句在浏览器中全局环境被认为是window对象

作用域链特性:在当前执行环境下访问某个变量时,如果不存在就一直向外层寻找,最终寻找到最外层也就是全局作用域,这样就形成了一个链条 闭包在经常出现的就是一个函数里面包裹着一个另一个函数,或者换一种说法就是有一个函数至少一个以上的函数包裹着,这个函数可以访问外层函数的环境中的变量对象中的值,下面是一些总结

闭包作用 作用1:隐藏变量,避免全局污染

作用2:可以读取函数内部的变量

同时闭包使用不当,优点就变成了缺点:

缺点1:导致变量不会被垃圾回收机制回收,造成内存消耗

缺点2:不恰当的使用闭包可能会造成内存泄漏的问题

这里简单说一下,为什么使用闭包时变量不会被垃圾回收机制收销毁呢,这里需要了解一下JS垃圾回收机制;

JS规定在一个函数作用域内,程序执行完以后变量就会被销毁,这样可节省内存;

使用闭包时,按照作用域链的特点,闭包(函数)外面的变量不会被销毁,因为函数会一直被调用,所以一直存在,如果闭包使用过多会造成内存销毁。