您当前的位置首页/JavaScript/ 正文

什么是JS的变量对象?

admin 最后更新时间 2018-07-06 15:01:02   165浏览
曾经有一次去面试被问到这个问题,当时一脸懵逼,因为我感觉自己已经完全明白了JS 的各种概念,但居然倒在了这个名词中。 后来网上查了一下,各种说法,也没搞明白到底是什么东西,总之就是和作用域相关的东西。 近来闲来无事,翻翻JS高程,居然发现自己以前看过这个东西,就是忘了。。。 一句话总结: 变量对象,顾名思义就是存储变量的对象,变量的作用域范围。 变量对象只存在两个地方: 1、全局环境 2、函数 比如浏览器运行环境,你定义在全局环境中的变量、函数都是存在于这个变量对象中的。 如果是定义在函数中的变量、函数,则就是存在于这个函数中的变量对象中。函数在创建完后就默认有个变量存在于变量对象中,就是arguments 变量对象并没有一个具体的名称或实体,但它的存在是非常重要的,所谓的作用域,也就是基于变量对象。 ``` var color = "blue" function changeColor() { if (color === 'blue') { color = "red" } else { color = "blue" } console.log(color) } changeColor() ``` 上面这个示例有两个变量对象,一个是全局的,一个是changeColor内部的 color变量是存在于全局的变量对象中的 changeColor中虽然没有声明任何变量,但是变量对象存在 arguments 这个变量,它是函数创建后就自动创建的一个变量 所以这里的作用域也分为两个,一个是全局作用域,一个是changeColor函数作用域 这两个变量对象看似是独立分割的,但也是有关联的。 changeColor的变量对象中虽然没有color变量,之所以能访问到color变量,是因为JS的有向上查找作用域链的规定,所以在全局变量对象中,查找到了color变量并访问它 也就是说,JS程序中,变量对象就是作用域的载体,作用域链让变量对象由以一种向上查找的规则联系在一起。