1.ES6中let和var的主要区别:
(1)let声明的变量只在当前块级作用域内有效。

if(true){var a=1;let b=2;
}
console.log(a);
console.log(b);
结果:1b 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);
}

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);  //连续的10个10},0);}结果:连续10个10原因:for循环是同步任务,setTimeout是异步任务,js是单线程函数,先执行同步任务,所有同步任务执行完成后才会执行异步任务。
 for(var i=0;i<10;i++){setTimeout("console.log(i)",1000);//连续的10个10}
原因: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
该链接说的更加详细

ES6中let的用法及一个小案例,在for循环中运行setTimeout的四种情况:相关推荐

  1. 用一个小案例来解释linux中文件或目录的权限

    Linux中文档和目录的权限 众所周知 , Linux中文档的权限包括所有者权限(User).同组权限(Group)和其他权限(Other).使用rwx来作为表示,分别为read.write和exec ...

  2. 在for循环中运行setTimeout的三种情况

    在for循环中运行setTimeout是前端开发很常见的一种模式.最近被考了一道相关的题目觉得很有意思也很容易犯错,于是记录下来当做学习笔记. 下面先来看一段代码: for(var i=0;i< ...

  3. else用法的一个小细节

    前言 在python中,大多数情况下,else都是配合if语句使用的,逻辑很简单,如果if的条件满足就执行if中的子句,否者(else)执行else中的. 但是偶然也看到配合循环语句使用的else 比 ...

  4. Python:通过一个小案例深入理解IO多路复用

    通过一个小案例深入理解IO多路复用 假如我们现在有这样一个普通的需求,写一个简单的爬虫来爬取校花网的主页 import requests import timestart = time.time()u ...

  5. 一个小案例理解case穿透、switch语句

    一.用case穿透简化代码以一个小案例为例:键盘录入星期数,输出工作日.休息日(1-5)工作日,(6-7)休息日 package test;import java.util.Scanner;publi ...

  6. 爬虫的一个小案例:python实现英汉互译

    什么是网络爬虫? 网络爬虫又称网络蜘蛛,是指按照某种规则在网络上爬取所需内容的脚本程序.众所周知,每个网页通常包含其他网页的入口,网络爬虫则通过一个网址依次进入其他网址获取所需内容. 一个小案例:py ...

  7. java有且仅有一个main_组成java Application的若干类中,有且仅有一个主类,只有主类中含有主方法main();...

    [单选题]Java 应用程序入口的 main 方法,其声明格式可以是(A) [填空题]点的水平投影与正面投影的连线( ) 于 OX 轴. [单选题]-Is there anything wrong w ...

  8. Hiberate中Update和Merge的一个小的区别

    1.Update和Merge的一个小区别总结 Update方法:如果要更新的对象是持久态而且在DirtyCheck的时候没有发现改变,那么就不发Update语句.如果更新的对象是游离态即使对象没有改变 ...

  9. SSH中后台传到前台一个信息集合,tr td中怎么进行排列,类似在一个div里排列书籍...

    总觉得描述问题不对,这里详细说一下,就是把下面图片变成排列整齐,一行四个,多出来的两个排到下一行. 我问过群里的,给的答案都有些简介:1:后台排好了,前台循环出来: 2:前台直接循环,多出来的加< ...

最新文章

  1. VC CListCtrl 第一列列宽自适应
  2. BZOJ 2028 [SHOI2009]会场预约
  3. 该怎么写Angular JS
  4. JavaSE(二十三)——JVM
  5. 《剑指offer》按之字行顺序打印二叉树
  6. aspnet core 2.1中使用jwt从原理到精通二
  7. 计算机应用基础专科作业二,电子科大18秋《计算机应用基础(专科)》在线作业2...
  8. c++ 查找文件夹下最新创建的文件_云计算开发总结:搜索Linux文件和文件夹的方法...
  9. WDA 程序文本翻译OTR
  10. C# 如何提取SaveFileDialog的保存路径?
  11. android给图片加边框,Android学习笔记进阶19之给图片加边框
  12. Kibana插件sentinl使用教程
  13. ios之JavaScript
  14. 最强悍的FCKEditor配置和攻略(转载)
  15. 机器学习作业班_python神经网络搭建
  16. java int 原子_java中的原子操作类AtomicInteger及其实现原理
  17. Wireshark数据抓包分析之FTP协议
  18. 【AI志愿超强攻略】中国高校人工智能专业最全院校排名课程对比
  19. Android免费加固加壳加密
  20. 跨站脚本攻击(XSS)

热门文章

  1. vivoX60pro和vivox60pro+的区别
  2. 详细说出微信小程序JavaScript语言功能好处意义
  3. linux火狐怎么查看源代码,Firefox查看源代码的快捷键是什么
  4. LeetCode 两数之和(Two Sum)
  5. java将字符串转换为大写或小写
  6. 三种本地存储策略的区别
  7. Oracle多表关联更新
  8. putty + xming 操作linux 图形化工具(亲测)
  9. matlab 对矩阵按照某一列排序
  10. 如何提高小学生的课堂注意力?