JS变量声明提升, let var

JavaScript的一个特性之一是,你可以稍后引用定义的变量,而不会发生异常。
这一现象被称为变量声明提升(hoisting),声明后得到的变量是undefined 值。
所以即使在引用或使用某个变量后存在初始化和声明操作,得到的仍将是undefined值。

console.log(a)
var a=3

undefined
等效于

var a;
console.log(a)
a = 3;

####顺便说下let 和 var 的区别
通过var定义的变量,作用域是整个封闭函数,是全域的 。通过let定义的变量,作用域是在块级或是子块中。
for (let i = 0; i < 10; i++) {
  // ...
}

console.log(i);
// ReferenceError: i is not defined
//计数器i只在for循环体内有效,在循环体外引用就会报错。

-不论var声明的变量处于当前作用域的第几行,都会提升到作用域的头部。 
-var 声明的变量会被提升到作用域的顶部并初始化为undefined,而let声明的变量在作用域的顶部未被初始化

// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;
//相当于在第一行先声明bar但没有初始化,直到赋值时才初始化

你可能感兴趣的:(JS变量声明提升, let var)