目录
var
let
const
在JavaScript中,主要使用var、let和const关键字来声明变量或常量
var
var是JavaScript早期时声明变量的方式,目前比较少用到
作用域:
- 函数内部声明:只在函数内部有效
- 函数外部声明:全局有效
变量提升:在执行代码时,var声明的变量就算在后面才被定义,也会被提升到当前作用域的顶部,但只有变量会被提升,值不会被提升
例如:
function testVar() {console.log(x); // undefined, 因为x已被提升var x = 10;console.log(x); // 10
}testVar();
在上述代码中,尽管var x=10在第一个console.log之后声明,但是console.log(x)会输出undefined而不是报错,因为变量提升
let
let是var的改进版本,let声明的变量只在所在的代码块(if语句、for循环等)内有效
暂时性死区:由let声明的变量在声明之前不能被访问,直到let语句被执行时,变量才会进入作用域
function testLet() {console.log(x); // ReferenceError: Cannot access 'x' before initializationlet x = 10;console.log(x); // 10
}testLet();
与let不同,如果在声明前使用变量,就会报错
const
const声明的变量不再可变,而是常量
必须在声明时就进行初始化,且一旦赋值就不可更改
和let相似,const也只在声明的代码块中有效
const x = 10;
console.log(x); // 10x = 20; // TypeError: Assignment to constant variable.
注意:尽管const创建的变量不能重新赋值,但如果是一个对象或者数组,则可以修改对象或数组的属性或元素
const只保证变量指向的内存地址不变,不限制对象内容的修改
const obj = { name: 'Alice' };
obj.name = 'Bob'; // 允许,修改对象内容obj = {}; // TypeError: Assignment to constant variable.
在上述代码中,虽然对象obj的引用不能变,但对象的内部属性可以变