var关键字
- var声明的范围是函数作用域
var操作符定义的变量会成为包含它的函数的局部变量
- 声明的变量会自动提升到函数作用域顶部
function aa(){
console.log(hello); // undefined
var hello = "123";
}
// 等价于如下代码
function aa(){
var hello;
console.log(hello); // undefined
hello = "123";
}
- var在全局作用域中声明的变量会成为window对象的属性
var aaaaa = "nainyuyu"
console.log(window.aaaaa); //nainyuyu
let关键字
- let声明的范围是块作用域
function a(){
let aa = "nianyuyu"
console.log(aa); // nainyuyu
}
console.log(aa); // Uncaught ReferenceError: aa is not defined
- let不允许一个块级作用域中出现冗余声明
function aa(){
let name = "nianyuyu";
// let name = "hello"; Uncaught SyntaxError: Identifier 'name' has already been declared
console.log(name); //nianyuyu
}
let name = "winter";
console.log(name); // winter
- let声明的变量不会在作用域中被提升
function aa(){
console.log(name); // Uncaught ReferenceError: Cannot access 'name' before initialization
let name = "nainyuyu"
}
- let在全局作用域中声明的变量不会成为window对象的属性
let name = "nainyuyu"
console.log(window.name); // 空值
const关键字
- const的行为与let基本相同:块作用域,不许重复声明
- const声明变量时必须同时初始化变量
- 修改const声明的变量会报错
const age = 26;
age = 27; //Uncaught TypeError: Assignment to constant variable.
- 如果const变量引用的是一个对象,那么修改这个对象内部的属性不违反限制
const person = {}
person.name = "nainyuyu";
console.log(person); //{name: "nainyuyu"}