JavaScript中的Hoisting,let和const的使用
Hoisting
Hoisting 是 JavaScript 将所有声明提升到当前作用域顶部的默认行为
JavaScript 只提升声明,而非初始化
实例
var x = 5; // 初始化 x
elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x + " " + y; // 显示 x 和 y
var y = 7; // 初始化 y
ES2015 引入了两个重要的 JavaScript 新关键词:let 和 const,这两个关键字在 JavaScript 中提供了块作用域(Block Scope)变量(和常量).
let
通过 var 关键词声明的变量没有块作用域, 可以使用 let 关键词声明拥有块作用域的变量
可以使用let关键字解决在块中重新声明变量的问题。
实例如下:
var x = 10;
// 此处 x 为 10
{
let x = 6;
// 此处 x 为 6
}
// 此处 x 为 10
通过 var 关键词定义的全局变量属于 window 对象,通过 let 关键词定义的全局变量不属于 window 对象。
通过 var 声明的变量会提升到顶端,可以在没有声明变量之前就使用它,通过let声明的变量不会被提升到顶端,在声明let之前就使用会导致ReferenceError.
const
const变量必须在声明时赋值,所以const定义的变量不能被提升
关键字 const 有一定的误导性。
它没有定义常量值。它定义了对值的常量引用。
因此,我们不能更改常量原始值,但我们可以更改常量对象的属性。
实例如下:
您可以创建 const 对象:
const car = {type:"porsche", model:"911", color:"Black"};
// 您可以更改属性:
car.color = "White";
// 您可以添加属性:
car.owner = "Bill";
但是不可以为常量对象重新赋值
const car = {type:"porsche", model:"911", color:"Black"};
car = {type:"Volvo", model:"XC60", color:"White"}; // ERROR