欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

谈一谈 JS 变量对象

程序员文章站 2022-03-21 11:22:37
目录谈一谈 JS 变量对象谈一谈作用域链谈一谈闭包解释名词:公有、私有、静态、特权谈一谈 JS 变量对象什么是变量对象:在函数执行之后,产生了执行上下文,在执行上下文中要生成一个变量对象,保存当前作用域中所有的变量,只有激活了变量对象,当前作用域的变量才能被访问。变量对象保存了当前作用域中声明的变量、函数、形参、arguments。变量对象的分类:全局变量对象:因为全局的变量和函数都是 window 对象的属性和方法,所以window对象就是全局变量对象。局部变量对象:变量对...

谈一谈 JS 变量对象

什么是变量对象:

  1. 在函数执行之后,产生了执行上下文,在执行上下文中要生成一个变量对象,保存当前作用域中所有的变量,只有激活了变量对象,当前作用域的变量才能被访问。
  2. 变量对象保存了当前作用域中声明的变量、函数、形参、arguments。

变量对象的分类:

  1. 全局变量对象:
    因为全局的变量和函数都是 window 对象的属性和方法,所以window对象就是全局变量对象。

  2. 局部变量对象:

    1. 变量对象首先要包含所有的 形参 和 实参。
    2. 在变量对象中添加当前作用域的所有的函数声明,以键值对形式表示,如果变量对象中有同名,则直接覆盖。
    3. 在变量对象中添加所有的变量声明,键值对表示,如果变量和形参或函数同名,则不干扰当前已经存在的属性。

谈一谈作用域链

  1. 函数在创建的时候就会创建一个包含全局变量对象的作用域链(scope chain)。
  2. 作用域链是:保证对 执行环境有权访问的所有变量和函数 的有序访问。
  3. 作用域链在函数定义的时候已经生成,但是并不完整。当函数执行的时候,会把自己的变量对象推到作用域链的最前端,以构成完整的作用域链。
  4. 作用域链的最前端一定是当前执行环境的变量对象,末端一定都是全局的变量对象。
  5. 搜索标识符的过程是从作用域链的最前端向最末端逐级搜索的过程,如果搜索不到可能会报错。

谈一谈闭包

什么是闭包:

理解一:函数嵌套函数,闭包就是内部嵌套的函数。
理解二:闭包就是包含被引用变量的 closure对象,在嵌套的内部函数中。

产生闭包的情况:

  1. 函数嵌套。
  2. 内部函数引用外部函数的变量。
  3. 调用外部函数。

闭包的作用:

  1. 延长了局部变量的生命周期。
  2. 可以在外部操作局部变量。

闭包的缺点:

  1. 函数的局部变量占用内存时间过长,容易造成内存泄漏。
  2. 解决:
    1. 减少使用闭包。
    2. 及时释放闭包。

解释名词:公有、私有、静态、特权

公有属性和方法:
设置给实例化对象的属性和方法。

私有属性和方法:
在构造函数中声明的变量和方法。

静态方法和静态属性:
直接把构造函数当做对象扩展的属性和方法,无需实例化即可访问。

特权方法:
在构造函数中设置给实例化对象的方法。

本文地址:https://blog.csdn.net/weixin_47021982/article/details/113998002

相关标签: JS javascript es6