作用域
作用域又有两种分类:静态作用域和动态作用域
静态作用域
静态作用域又称词法作用域,作用范围由程序定义的位置决定
静态作用域---例子
var x=10;
function foo(){
alert(x);
}
function bar(){
var x=20;
foo();
}
bar();//x=20;
动态作用域
由程序运行时决定。
Js变量作用域
Js使用静态作用域
Js没有块级作用域(全局作用域,函数作用域等)
ES5中使用词法环境管理静态作用域
词法环境
描述环境的一个对象
环境记录
用来记录环境里面的形参,变量声明, 变量,对象arguments等等对外部词法环境的引用(outer)
环境记录
用来记录环境里面的形参,变量声明, 变量,对象arguments等等
环境记录初始化–声明提前
**在JS中每一段代码执行前都会进行相应的初始化**,比如全局代码,则会初始化全局环境,函数代码执行前就会初始化函数环境
声明提前:就是说当全局代码或函数代码执行前会先扫描整个函数里面的内容,将其中的形参变量记录到环境记录里面。