变量作用域
- 一个变量的作用域是程序代码中定义这个变量的区域 - 全局变量拥有全局作用域,也就是说在JavaScript代码中的任何地方都有定义 - 局部变量:在函数内声明的变量只在函数体内有定义,他们叫局部变量,函数的参数也是局部变量,他们只在函数体内有定义 - 在函数中,局部变量的优先级高于同名的全局变量
-
函数作用域 - JavaScript的函数作用域是指在函数内声明的所有变量在函数体内始终是可见的
-
- 一段代码块在浏览器中执行会进行预编译环节,在预编译中有四部曲 1.创建AO对象 2.找形参和变量声明,将变量和形参作为AO属性名值为undefined 3将形参和实参值进行统一 4在函数踢里找函数声明,值赋值为函数体 - 每一个函数也是对象,都有一个隐士的属性scope,scope中存着GO和AO,一个函数在执行前会产生一个GO也就是全局作用和AO也就是局部作用域例如一个函数A中有函数B函数B中有函数C函数C中有函数D,在这样的函数体中A执行前会产生一个GO和AO,GO中存放的是window中声明的变量,AO是函数当前预编译产生的对象,如A中函数中scope存在的第0位是A的AO,第1位是A的GO,B函数中scope第0为是B的AO,第1位是A的AO,第2位是GO,C函数中scope第0为是C的AO,第1位是B的AO,第2位是A的AO,第3位是GO,D函数中scope第0位是D的AO,第1位是C的AO,第2位是B的AO,第3为是A的AO,第4为是GO, - 每当函数执行时都是从当前函数的顶端开始访问 像这种作用域程一个链表展示这就是作用域链