序:(初始化的意思就是赋值)
定义常量:const
定义变量:var,let
特性
const :1:第一次赋值以后就无法修改 2声明后必须马上初始化(赋值) 3:有块级作用域 4:无常量提升 存在暂时性死区,只在声明的位置后面使用。5:不可重复声明
var:1:可以重复声明 2:存在变量提升3:无法限制修改:4:没有块级作用域
let:1:不可以重复声明 2:不存在变量提升 3:有块级作用域
====》下面是代码示例:(复制到script里面查看console口)
概念:块级作用域{ }-------》作用域只在{ }有效,{ }外无效。
暂时性死区
const
1:const声明一个只读的常量。一旦声明,常量的值就不能改变
const PI=3.1415;
PI // 3.1415PI=3; // 报错:TypeError: Assignment to constant variable.
2:const一旦声明变量,就必须立即初始化,不能留到以后赋值。
const foo; // 报错SyntaxError: Missing initializer in const declaration
3:有块级作用域,const的作用域与let命令相同:只在声明所在的块级作用域内有效。
if(true){
const MAX=5;
}
MAX // 报错:Uncaught ReferenceError: MAX is not defined
4:无常量提升,存在暂时性死区,只能在声明的位置后面使用。
if(true){
console.log(MAX); // ReferenceError
const MAX=5;
}
5:不可重复声明
var message="Hello!";
let age=25;
// 以下两行都会报错
const message="Goodbye!";
const age=30;
var:1:可以重复声明 2:存在变量提升3:无法限制修改:4:没有块级作用域
1:可以重复声明
var a = 6;
var a = 100000;
console.log( a ); //a的值为100000,没有报错
2:存在变量提升(可以在没有声明在前调用
console.log(MAX); // MAX的值为5,不报错
var MAX=5;
3:无法限制修改
let:1:不可以重复声明 2:不存在变量提升 3:有块级作用域
1:不可以重复声明
let a = 6;
let a = 100000;
console.log( a ); //报错
2:不存在变量提升
// var 的情况
console.log(foo); // 输出undefined
var foo=2;
// let 的情况
console.log(bar); // 报错 ReferenceError
let bar=2;
3:有块级作用域 (计数器i只在for循环体内有效,在循环体外引用就会报错。)
概念:暂时性死区块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。
for(leti=0;i<10;i++){
// ...
}
console.log(i); // 报错ReferenceError: i is not defined