一、var
1、var在全局有效
{
var n = 1;
}
console.log(n);
output:1
2、var可以多次赋值
var n = 2
console.log(n);
output:2
3、var存在变量提升
console.log(num);
var num = 1 ;
output:undefined,脚本运行时,num已经存在,但是没有赋值
4、循环
for (var i = 0; i < 10; i++) {
setTimeout(function(){
console.log(i);
},1000)
}
output:十个10
由于i是var声明的,是全局有效的,所以循环里只有一个i,
setTimeout方法是不阻碍主线程运行的
i等于10时,不符合i<10,才开始执行setTimeout方法,
i的值依然是10,所以输出的是10个10
二、let
1、let 声明的变量只在 let 命令所在的代码块内有效
{
let a = 0;
}
console.log(a) // 报错 ReferenceError: a is not defined
2、let不能重复声明,不能重复声明,不代表不能多次赋值
let a = 1;
let a = 2;
报错:Uncaught SyntaxError: Identifier 'a' has already been declared
3、不存在变量提升
console.log(o);
let o = 1;
报错:Uncaught ReferenceError: o is not defined
4、循环
for (let j = 0; j < 10; j++) {
setTimeout(function(){
console.log(j);
})
}
output:0123456789
每一次循环j都是一个新的变量
三、const
1、const 声明一个只读变量,声明之后不允许改变。意味着,
一旦声明必须初始化,否则会报错
const a;
没有初始化
报错:Uncaught SyntaxError: Missing initializer in const declaration
2、声明后的值,不允许改变
const num = 1;
const num = 2;
再次赋值时报错
Uncaught SyntaxError: Identifier 'num' has already been declared
const 声明的简单类型变量等同于常量
本文详细介绍了JavaScript中的var、let和const三种声明变量的方式,包括它们的作用域、提升、可变性及在循环中的表现。var在全局有效,存在变量提升,容易导致意外;let不允许重复声明,不提升,适用于块级作用域;const声明常量,一旦赋值不可更改,常用于定义不可变的值。
658

被折叠的 条评论
为什么被折叠?



