函数作用域和提升

在ES6 引入let 之前,变量都是var 声明的,并且存在函数作用域的说法。 使用let声明变量,变量只有在声明后才存在。
而使用var声明变量,变量在当前作用域都可以调用,甚至在声明之前,未声明的变量和值为undefined的变量不是一个概念。使用未声明的变量会报错,但是可以安全的使用已经存在的且值为undefined的变量。

(例1) 使用let时,如果使用的变量未声明,将会得到一个错误

console.log(x)   // 错误终止
let x = 3;    

(例2)使用var时,可以在变量声明前调用

console.log(x)            // undefined
var  x = 3;    
console。log(x)            // 3

怎么会这样呢?? 表面看上去有点难以理解,因为不能去访问一个尚未声明的变量。
实际上,var声明的变量采用的提示机制。JavaScript会扫描当前作用域,任何使用var声明的变量都会被提升到作用域的顶部。重点要理解的是被提升的是声明,而不是赋值。所以JavaScript会将我们上(例2)中的代码翻译成下面的形式。

var x  
console.log(x)
x = 3
console.log(x)

猜你喜欢

转载自blog.csdn.net/qq_44977477/article/details/108602210