1.ES6中let和var的主要区别:
(1)let声明的变量只在当前块级作用域内有效。
if(true){
var a=1;
let b=2;
}
console.log(a);
console.log(b);
结果:1
b is not defined
(2)let和const声明的变量不能被重复声明。
结果:我是爸爸
我才是爸爸
let son='儿子';
let son='我才是';
结果会报错,因为不能重复声明son
(3)不存在变量的提升。
console.log(dad);
let dad='爸爸';
//此时会报错,因为let声明的变量不会自动提到前面,此时dad被理解为一个没有声明的变量。
(4)暂存死区
var monkey='你是猴子';
{
console.log(monkey);
var monkey='我觉得是';
}
console.log(monkey);
//结果:
你是猴子
我觉得是
let monkey='你是猴子';
{
console.log(monkey);
let monkey='我觉得是';
}
console.log(monkey);
//ES6规定,如果块级作用域中存在let或者const声明的变量,这个变量一开始就会形成一个封闭的作用域,所以第一个console.log(monkey);拿不到外面的结果。
结果:
2.块级作用域简单地说就是一个{}包起来的区域。
3.生成十个按钮,每个按钮点击的时候弹出1–10;
//用var实现
var i=0;
for(i=1;i<=10;i++){
(function(i){
var btn=document.createElement('button');
btn.innerText=i;
btn.onclick=function()
{
alert(i);
};
document.body.appendChild(btn);
})(i);
}
//用let实现
for(let i=1;i<=10;i++){
var btn=document.createElement('button');
btn.innerText=i;
btn.onclick=function()
{
alert(i);
};
document.body.appendChild(btn);
}