使用const声明常量,声明时就必需初始化,不能留到以后赋值
const声明的常量,允许在不重新赋值的情况下修改它的值
(1)基本数据类型不能修改
(2)引用数据类型
const person={
username:'alex';
}
person.username='Zx';
只要作用域内存在let,const;他们所声明的变量或常量就自动绑定这个区域,不再受到外部作用域的影响
let,const存在暂时性死区,var不存在
let a=2;
function func1(){
console.log(a);
let a=1;
}
func1();
func1()
(1)报错:Cannot access ‘a’ before initialization
(2)函数只有被调用时才会形成作用域
(3)函数作用域中没有a(let不存在变量提升),向上寻找,但在函数中用let声明了a,a自动绑定函数作用域,不允许向上寻找,导致a未被初始化
var没有块级作用域,let和const有块级作用域
for(let i=0;i<3;i++){}
console.log(i); //报错,i未被定义,只有for中有定义
作用域链:全局作用域,函数作用域,块级作用域
块级作用域有:{};for(){} ;while(){}; do{}while(); if(){}; switch(){};只有和let,const配合才会生成块级作用域
点击0,1,2按钮打印出对应的值
<button class="btn">0</button>
<button class="btn">1</button>
<button class="btn">2</button>
.btn {
width: 100px;
height: 100px;
margin-right: 20px;
font-size: 80px;
cursor: pointer;
}
let btns = document.querySelectorAll('.btn');
for (let i = 0; i < btns.length; i++) {
btns[i].addEventListener(
'click',
function () {
console.log(i);
},
false
);
}