IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> ES6中let的用法及一个小案例,在for循环中运行setTimeout的四种情况: -> 正文阅读

[JavaScript知识库]ES6中let的用法及一个小案例,在for循环中运行setTimeout的四种情况:

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);
}

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

   for(var i=0;i<10;i++){
      setTimeout(console.log(i),0);
  }
结果:0,12,34,56,78,9
原因:console.log()是同步任务和for循环是同步执行的
 for(var i=0;i<10;i++){
     setTimeout(function(){
         console.log(i);  //连续的10个10
     },0);
 }
 结果:连续1010
 原因: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,12,3

https://blog.csdn.net/Febby_/article/details/94763441
该链接说的更加详细

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:20:01  更:2022-03-08 22:22:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:41:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码