ES5中变量var
有两个作用域,全局作用域和函数作用域;
ES6中变量let
const
多了一个作用域,块作用域
var
和let
的区别
例如在for循环中,变量i就是在块作用域中
- 使用
var
修饰的变量,在块作用域外也可以使用;使用let
修饰的变量,在块作用域外不能使用
for (let i = 0; i < 3; i++) {
//for (var i = 0; i < 3; i++) {
console.log(i);
}
//for循环是一个块作用域,因此在此作用域内用let声明的i,出了块作用域外,生命周期就结束了,即let声明的变量只在自己的块作用域内有效
//当使用var修饰i时,此处输出i,会正常输出3(ES5用法)
//当使用let修饰时,此处会报错i是undefined(ES6用法)
console.log(i);
- 使用
var
修饰的变量,可以重复声明;使用let
修饰的变量不可以重复声明
//此处使用let,不能重复声明这个变量
let b = 1;
let b = 2;
//正常
var b = 1;
var b = 2;
const
的使用
-
const
修饰的是常量 -
const
修饰的常量,必须赋值 -
const
修饰的常量是对象时,对象里边的内容是可以修改的
function last() {
//常量,不能修改
//const在块作用域和let是一样的用法
//const声明常量时,必须赋值
const PI = 3.1415926;
const k = {//常量对象
a:1
};
//当常量是对象时,对象是引用类型(返回值是对象在内存中的指针,即k是指针,指向对象),指针k是不能改变的,对象是可以改变的
k.b=3;
console.log(PI,k);
}
last();
网友评论