var let const 的比较
var 关键字的作用于是函数作用域,有申明提升
example:
// 申明提升
function test() {
console.log(name);
var name= 'wang';
}
test(); // undefined
// 函数作用域
function test() {
var message = "heihei";
}
test();
console.log(message); // ReferenceError: message is not defined
// 可以定义相同的变量
var age = 18
var age = 20
console.log(age) // 20
let 关键字是块级作用域,没有申明提升,不能定义相同的变量
example
if (true) {
var age= 18;
console.log(age); // 18
}
console.log(age); // 18 块作用域是函数作用域的子集,所以这里可以打印出18
if (true) {
let age = 18;
console.log(age); // 18
}
console.log(age); // ReferenceError: age is not defined 在 if 块级外面,会报未定义
let age = 30;
console.log(age); // 30
if (true) {
let age = 26;
console.log(age); // 26
}
// 这里不会报错,因为JavaScript引擎会记录用于变量声明的标识符及其所在的块作用域,因此嵌套使用相同的标识符不会报错,而这是因为同一个块中没有重复声明
const 的用法与 let 基本相同,唯一一个重要的区别是用它声明变量时必须同时初始化变量,且尝试修改const声明的变量会报错。
注意:
const声明的限制只适用于它指向的变量的引用。如果const变量引用的是一个对象,那么修改这个对象内部的属性并不违反const的限制。
const person = {};
person.name = 'wang'; // 会修改成功
网友评论