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='爸爸';
(4)暂存死区
var monkey='你是猴子';
{
console.log(monkey);
var monkey='我觉得是';
}
console.log(monkey);
你是猴子
我觉得是
let monkey='你是猴子';
{
console.log(monkey);
let monkey='我觉得是';
}
console.log(monkey);
结果:
2.块级作用域简单地说就是一个{}包起来的区域。
3.生成十个按钮,每个按钮点击的时候弹出1–10;
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);
}
for(let i=1;i<=10;i++){
var btn=document.createElement('button');
btn.innerText=i;
btn.onclick=function()
{
alert(i);
};
document.body.appendChild(btn);
}
4.在for循环中运行setTimeout的三种情况:
for(var i=0;i<10;i++){
setTimeout(console.log(i),0);
}
结果:0,1,2,3,4,5,6,7,8,9
原因:console.log()是同步任务和for循环是同步执行的
for(var i=0;i<10;i++){
setTimeout(function(){
console.log(i);
},0);
}
结果:连续10个10
原因:for循环是同步任务,setTimeout是异步任务,js是单线程函数,先执行同步任务,所有同步任务执行完成后才会执行异步任务。
for(var i=0;i<10;i++){
setTimeout("console.log(i)",1000);
}
原因:console.log加上双引号,不是立即执行函数,setTimeout会自动判断第一个参数是个函数。
for(let i = 0; i < 5; i++){
setTimeout(function(){
console.log(i);
}, 1000 * i);
}
结果:0,1,2,3
https://blog.csdn.net/Febby_/article/details/94763441 该链接说的更加详细
|