js作用域及闭包

作用域

执行环境是js最为重要的一个概念。执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为。

   1、全局执行环境就是最外围的一个执行环境,每一个函数都有自己的作用域

   2、简单的说局部作用域可以访问外部作用域,外部作用域不能访问局部作用域

 

 

预解析:

这里涉及到一个js解析器的工作方式

 首先: 他会在所在的执行环境找一些东西,比如var function 参数 所有变量在正式运行代码之前都提前赋予一个未定义,所有函数在未正式运行之前都是一个代码  块,遇到重名的只会留一个,变量和函数重名只会留下函数,函数和函数重名只会留下后面哪一个

 然后:逐行解读代码

 

域:

script全局变量 全局函数,只要是一个域那么就会有预解析,然后执行,js是单线程,自上而下
函数 ,json 局部域

 

 闭包

闭包是:能够访问另一个函数作用域内部变量的函数

闭包的使用场景:封装模块的时候,通过函数自执行函数的方式进行实现;或者模仿块级作用域的时候实现。以前es6没出来之前用的比较多

闭包的优点:

  1.  能够离开函数之后继续访问该函数的变量,变量一直会保存在内存中
  2. 闭包中的变量是私有的,只有闭包函数才有权限访问它。不会被外面的方法和属性污染

闭包的缺点:

  1. 会增加对内存的使用量,影响性能
  2. 不正确的使用闭包会导致内存泄露

 

posted @ 2016-12-28 15:29  LLC-Mite  阅读(107)  评论(0编辑  收藏  举报