JS|闭包&执行上下文&作用域链

闭包

闭包是有权访问另一个函数作用域中变量的函数。
创建闭包最常见的方式是在函数内创建另一个函数,创建的函数可以访问到当前函数的局部变量。
闭包的两个常用用途:

  • 在函数的外部可以访问到函数内部的变量,通过使用闭包,可以在外部调用闭包函数,从而在外部访问到函数内部的变量,可以通过这种方式来创建私有变量。
  • 使已经结束的函数上下文中的变量对象继续留在内存中,因为闭包函数保留了这个变量的引用,所以这个变量对象不会被回收。

作用域

  • 全局作用域
    最外层函数和其外面定义的变量拥有全局作用域;
    window对象属性拥有全局作用域;
    过多使用全局作用域会污染全局命名空间。
  • 函数作用域
    函数作用域声明函数内部的变量;
    内层作用域可以访问到外侧作用域,反之不行。
  • 块级作用域
    let和const指令可以声明块级作用域,由{}包裹的代码片段。

作用域链

在当前作用域中查找需要变量,如果没有,就以此向父级作用域查找,该关系就是作用域链。

执行上下文

在执行一段js代码之前,需要先解释代码,解释的时候会先创建一个全局执行上下文环境,先把变量先赋值undefined,函数声明拿出,这一步执行完了才开始正式执行程序。
在函数执行前,会有变量定义,函数声明,this,arguments,函数参数。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容