变量提升

文章目录

js在运行时会先扫描一遍代码,将varfunction声明提升到顶部,但不会提升var赋值;【参考资料

// y未声明的情况下直接使用会报错

var x = 'Hello';
x += y; // y is not defined
// y的声明会被提升,但是赋值不会被提升

var x = 'Hello';
x += y; // Helloundefined
var y = 'Bob';
var a = 1;

(function () {
console.log(a); // undefined
var a = 2;
console.log(a);
})();

虽然可以使用let来避免变量提升,但是经过babel编译后,let最终也会变成var

// 无编译
let x = 'Hello';
x += y; // y is not defined
let y = 'Bob';

// 编译后
"use strict";
var x = 'Hello';
x += y; // Helloundefined
var y = 'Bob';