js - 作用域
ru shui 2021-09-15 About 1 min
# 作用域
# 全局作用域
- 全局作用在页面打开时被创建,页面关闭时被销毁。
- 在
script
中写的函数和变量,作用域为全局,在页面的任意位置都可以访问到。 - 全局作用域有全局对象
window
,代表一个浏览器窗口,由浏览器创建,可以直接使用。 - 全局作用域中声明的变量和函数(使用
const
或let
声明的变量不会)会作为window
对象的属性和方法保存。
# 函数作用域
- 函数调用时,函数作用域会被创建,函数执行完毕,函数作用域作用域会被销毁。
- 每调用一次函数就会创建一个新的函数作用域,它们之间是彼此独立的。
- 在函数作用域中可以访问到全局作用域中的变量,在函数外无法访问到函数作用域内的变量(闭包除外)。
- 在函数作用域中访问变量、函数时,会先在自身作用域中寻找,如果没有找到相应的变量、函数的话,就会沿着作用域链不断查找,直到找不到为止。
# 作用域的深层次理解
- 执行上下文。
- 在函数执行前期,会创建一个执行上下文的内部对象
AO
。 - 这个内部对象
AO
时在预编译的时候创建的。 - 在全局代码执行前期,会创建在全局执行上下文中创建一个全局内部对象
GO
(原理一样,可以将 js 代码看成一个全局函数的执行)。
- 在函数执行前期,会创建一个执行上下文的内部对象