ES5中js的作用域和变量提升
ES5 中JS 的作用域:
在ES5 中,JS 只有两种形式的作用域:全局作用域和函数作用域。
全局作用域
全局对象的作用域,任何地方都可以访问到(如果没有被函数作用域覆盖)。
函数作用域
整个函数的范围内可访问。
变量提升:
ES5 中存在变量提升,ES6 中并不存在变量提升。因此下面的内容只针对ES5。
ES5 中变量声明会提升到它所在 作用域的顶端 去执行。
以下两段示例代码是一样的结果:
代码1:
a = 5; // 变量 a 设置值为 5
console.log(a);
var a; // 声明 a
代码2:
var b; // 声明 b
b = 5; // 变量 b 设置值为 5
console.log(b);
函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部。
但是需要注意的是:被初始化的变量不会提升
以下两段示例代码是不一样的结果:
代码1:
var x = 5; // 初始化 x
console.log(x + y);//12
var y = 7; // 初始化 y
代码2:
var x = 5; // 初始化 x
console.log(x + y);//NaN
var y = 7; // 初始化 y
扩展:
console.log(v1);
var v1 = 100;
function foo() {
console.log(v1);
var v1 = 200;
console.log(v1);
}
foo();
console.log(v1);
打印结果为:
image.png