作用域说明:一般理解指一个变量的作用范围
全局作用域:
- 全局作用句在页面打开时被创建,页面关闭时被销毁;
- 编写在
script标签中的变量和函数,作用域在全局,在页面的任意位置都可以访问到; - 在全局作用域中有
全局对象window,代表一个浏览器窗口,由浏览器创建,可以直接调用; - 全局作用域中声明的变量和函数会作为
window对象的属性和方法保存
函数作用域:
- 调用函数时,函数作用域被创建,函数执行完毕,函数作用域被销毁;
- 每调用一次函数就会创建一个新的函数作用域,他们之间是相互独立的;
- 在函数作用域中可以访问到全局作用域的变量,在函数外无法访问到函数作用域内的变量;
- 在函数作用域中访问变量/函数时,先回在自身作用域中寻找,若没有找到,则会到函数的上一级作用寻找,一直到全局作用域; 作用域的深层次理解
- 执行器的上下文
- 当函数代码执行的前期,会创建一个执行器上下文的内部
对象AO(作用域); - 在这个内部的对象时预编译的时候创建出来的,因为当函数被调用的时候 会先进行预编译;
- 在全局代码执行的前期会创建一个执行期的上下文的
对象GO. - 这里有关JS的预编译也简单提一下 函数作用域预编译
- 当函数代码执行的前期,会创建一个执行器上下文的内部
创建AO对象AO{};- 找形参和变量声明,将变量和形参名当作AO对象的属性名,值为
undefined; - 实参形参相统一;
- 在函数体里面找函数声明,值赋予函数体 全局作用域的预编译
创建GO对象- 找变量声明,将变量名作为GO对象的属性名,值为
undefined - 找函数声明,值赋予函数体