谈一谈 JS 变量对象
程序员文章站
2022-03-21 11:22:37
目录谈一谈 JS 变量对象谈一谈作用域链谈一谈闭包解释名词:公有、私有、静态、特权谈一谈 JS 变量对象什么是变量对象:在函数执行之后,产生了执行上下文,在执行上下文中要生成一个变量对象,保存当前作用域中所有的变量,只有激活了变量对象,当前作用域的变量才能被访问。变量对象保存了当前作用域中声明的变量、函数、形参、arguments。变量对象的分类:全局变量对象:因为全局的变量和函数都是 window 对象的属性和方法,所以window对象就是全局变量对象。局部变量对象:变量对...
谈一谈 JS 变量对象
什么是变量对象:
- 在函数执行之后,产生了执行上下文,在执行上下文中要生成一个变量对象,保存当前作用域中所有的变量,只有激活了变量对象,当前作用域的变量才能被访问。
- 变量对象保存了当前作用域中声明的变量、函数、形参、arguments。
变量对象的分类:
-
全局变量对象:
因为全局的变量和函数都是window
对象的属性和方法,所以window
对象就是全局变量对象。 -
局部变量对象:
- 变量对象首先要包含所有的 形参 和 实参。
- 在变量对象中添加当前作用域的所有的函数声明,以键值对形式表示,如果变量对象中有同名,则直接覆盖。
- 在变量对象中添加所有的变量声明,键值对表示,如果变量和形参或函数同名,则不干扰当前已经存在的属性。
谈一谈作用域链
- 函数在创建的时候就会创建一个包含全局变量对象的作用域链(scope chain)。
- 作用域链是:保证对 执行环境有权访问的所有变量和函数 的有序访问。
- 作用域链在函数定义的时候已经生成,但是并不完整。当函数执行的时候,会把自己的变量对象推到作用域链的最前端,以构成完整的作用域链。
- 作用域链的最前端一定是当前执行环境的变量对象,末端一定都是全局的变量对象。
- 搜索标识符的过程是从作用域链的最前端向最末端逐级搜索的过程,如果搜索不到可能会报错。
谈一谈闭包
什么是闭包:
理解一:函数嵌套函数,闭包就是内部嵌套的函数。
理解二:闭包就是包含被引用变量的 closure
对象,在嵌套的内部函数中。
产生闭包的情况:
- 函数嵌套。
- 内部函数引用外部函数的变量。
- 调用外部函数。
闭包的作用:
- 延长了局部变量的生命周期。
- 可以在外部操作局部变量。
闭包的缺点:
- 函数的局部变量占用内存时间过长,容易造成内存泄漏。
- 解决:
- 减少使用闭包。
- 及时释放闭包。
解释名词:公有、私有、静态、特权
公有属性和方法:
设置给实例化对象的属性和方法。
私有属性和方法:
在构造函数中声明的变量和方法。
静态方法和静态属性:
直接把构造函数当做对象扩展的属性和方法,无需实例化即可访问。
特权方法:
在构造函数中设置给实例化对象的方法。
本文地址:https://blog.csdn.net/weixin_47021982/article/details/113998002