const
用于声明一个常量,该常量有自己的块级作用域。常量不能重新声明,不能重新赋值。并且必须要有初始值。
const a = 10;
a = 20;
console.log(a)// 会报错
const b;
console.log(b)// 会报错
var b;
console.log(b)// undefined
//块级作用域
function test() {
const a = [1,2,3];
(function test2() {
const a = [4,5,6];
console.log(a);
})();
console.log(a);
}
执行结果
[4, 5, 6]
[1, 2, 3]
undefind //这是因为函数没有返回值
let
let 语句声明一个块级作用域的本地变量,并且可选的将其初始化为一个值。
let允许你声明一个作用域被限制在块级中的变量、语句或者表达式。与var关键字不同的是,var声明的变量只能是全局或者整个函数块的。
//块级作用域
function varTest() {
var x = 1;
if (true) {
var x = 2; // 同样的变量!
console.log(x); // 2
}
console.log(x); // 2
}
function letTest() {
let x = 1;
if (true) {
let x = 2; // 不同的变量
console.log(x); // 2
}
console.log(x); // 1
}
//打印索引值
假如有5个li,当点击当前的li打印当前元素的索引值。
var li = querySelectorAll('li');
for (var i=0; i<li.length; i++){
li[i].onclick = function(){
console.log(i);//每次打印都是5
}
}
let li = document.querySelectorAll('li');
for(let i=0; i<li.length; i++) {
li[i].onclick = function() {
console.log(i);//打印的是当前索引
}
}
在程序或者函数的顶层,let并不会像var一样在全局对象上创造一个属性,比如
var x = 'global';
let y = 'global';
console.log(this.x); // "global"
console.log(this.y); // undefined