JS中的var、let、constant
JavaScript 有三种声明变量方式:var let constant 。
全局变量:全局有效,在{}内外皆有效。
局部变量:函数内部定义的变量,仅在函数内部有效,函数结束即被销毁。
var
1.作用域
函数内使用 var 声明的变量只能在函数内容访问,如果不使用 var 则是全局变量。
使用var关键字声明的全局作用域变量属于window对象。
2.重置变量
var 可以重置变量
var x = 2;
// x 为 2
var x = 3;
// 现在 x 为 3
循环作用域
var i = 5;
for (var i = 0; i < 10; i++) {
// 一些代码...
}
// 这里输出 i 为 10
3.变量提升
var变量可以先使用后定义
let
1 作用域
let 声明的变量只在 let 命令所在的代码块内有效。
{
let x = 2;
}
// 这里不能使用 x 变量
let声明的变量只在声明的{}中有效,{}无效。
var x = 10;
// 这里输出 x 为 10
{
let x = 2;
// 这里输出 x 为 2
}
// 这里输出 x 为 10
循环作用域:
let i = 5;
for (let i = 0; i < 10; i++) {
// 一些代码...
}
// 这里输出 i 为 5
使用 let 关键字声明的全局作用域变量不属于 window 对象:
2 重置变量
let 关键字在不同作用域,或不同块级作用域中是可以重新声明赋值的:
let x = 2; // 合法
{
let x = 3; // 合法
}
{
let x = 4; // 合法
}
在相同作用域中,不可以使用let 对let var 声明的变量进行重新赋值,不能使用 var 关键字来重置 let 关键字声明的变量。
3 变量提升
let 不可以进行变量提升,只能先定义后使用。
constant
1 作用域
constant用于声明一个或多个变量,声明时必须进行初始化,且初始化后值不可再修改,与let相似都是块级作用域。
2 重置变量
在相同的作用域和块级作用域中,不可以使用constant 对constant let var 重新赋值。
在不同的作用域和块级作用域中,可以使用constant 重新赋值的.
const x = 2; // 合法
{
const x = 3; // 合法
}
{
const x = 4; // 合法
}
使用 const 定义的对象或者数组,其实是可变的。下面的代码并不会报错:
// 创建常量对象
const car = {type:"Fiat", model:"500", color:"white"};
// 修改属性:
car.color = "red";
// 添加属性
car.owner = "Johnson";
const car = {type:“Fiat”, model:“500”, color:“white”};
car = {type:“Volvo”, model:“EX60”, color:“red”}; // 错误
3 变量提升
constant 定义的变量必须先声明后使用
总结
使用var关键字声明的全局作用域变量属于window对象。
使用let关键字声明的全局作用域变量不属于window对象。
使用var关键字声明的变量在任何地方都可以修改。
在相同的作用域或块级作用域中,不能使用let关键字来重置var关键字声明的变量。
在相同的作用域或块级作用域中,不能使用let关键字来重置let关键字声明的变量。
let关键字在不同作用域,或不用块级作用域中是可以重新声明赋值的。
在相同的作用域或块级作用域中,不能使用const关键字来重置var和let关键字声明的变量。
在相同的作用域或块级作用域中,不能使用const关键字来重置const关键字声明的变量
const 关键字在不同作用域,或不同块级作用域中是可以重新声明赋值的:
var关键字定义的变量可以先使用后声明。
let关键字定义的变量需要先声明再使用。
const关键字定义的常量,声明时必须进行初始化,且初始化后不可再修改。