-js使用静态作用域:只与变量声明位置有关,而与函数执行顺序无关
-js没有块级作用域:没有for、if这种块级作用域
-ES5中使用词法环境管理静态作用域
一、词法环境:
1、组成:
-环境记录(形参、变量、函数等)
-对外部词法环境的引用(outer)
2、一段代码开始执行前,先初始化词法环境
-有哪些参数会被初始化到词法环境中?
形参、函数定义、变量定义
-使用var定义的参数,在初始化词法环境中都是undefined。
3、结构:
4、问题:
-形参、函数定义、变量定义名称冲突
优先级:函数定义 > 形参 > 变量定义
-arguments:在函数里面定义好的变量、我们可以通过arguments访问到函数中传过来的实参,也被放到了词法环境中
-函数表达式
函数对象在函数表达式执行时才创建,函数定义中的函数对象是在函数执行前就创建了。
5、词法环境的改变:
-with
-try。。。catch