作用域与预解析

Posted by Eric on March 31, 2017

作用域与预解析

作用域一般只针对变量和函数而言,作用域控制着变量和函数的可见性和生命周期。变量的作用域总是整个函数(没有块级作用域)。

函数作用域

在函数里面定义的变量叫做局部变量,这种变量只在函数内部有效,而在函数外部定义的变量叫做全局变量,其在整个程序里面都有效。

预解析

JavaScript在script标签里面的过程分为预解析和执行两个过程,预解析就是程序执行之前做的事情。预解析会在script里面寻找var(包括定义的标识符)和function(仅仅是声明函数),var会提前赋值为undefined,而function函数名就是整个声明函数。如果varfunction的命名重复,function会优先。

变量的声明会被提升,只要变量后面有var声明,前面的变量就会输出undefined,而不会报错(not defined)。变量提升的原理就是预解析的作用,预解析是在程序执行前面运行的,所以会首先识别出后面的var声明。