这三个月来的总结都写到了本地,一直没有发布。我从今天开始会陆续写写对前端三大基本功和VUE的知识点总结。文章如果是其他人的观点,我会注明出处。
首先是ES6中的let和var:
一. 阮一峰网站
let 和 const 命令 - ECMAScript 6入门 (ruanyifeng.com)
总结:
1. let所声明的变量,只在let命令所在的代码块内有效。
var命令声明的,在全局范围内都有效.
2.let不存在变量提升 ,var存在(var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined)。
3.暂时性死区。总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。
评价:ES6 规定暂时性死区和let、const语句不出现变量提升,主要是为了减少运行时错误,防止在变量声明前就使用这个变量,从而导致意料之外的行为。这样的错误在 ES5 是很常见的,现在有了这种规定,避免此类错误就很容易了。
暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。
4.let不允许在相同作用域内,重复声明同一个变量。
为什么需要块级作用域?
第一种场景,内层变量可能会覆盖外层变量。
第二种场景,用来计数的循环变量泄露为全局变量。
使用:
1.ES6 允许块级作用域的任意嵌套。
2.内层作用域可以定义外层作用域的同名变量。
3.块级作用域的出现,实际上使得获得广泛应用的匿名立即执行函数表达式(匿名 IIFE)不再必要了。
块级作用域与函数声明
二、方应杭知乎
我用了两个月的时间才理解 let - 知乎 (zhihu.com)
更新:关于代码块1的解释:
(24条消息) let和var的区别_Conso1e的博客-优快云博客
1. 浅显的理解:
- let 声明的变量的作用域是块级的;
- let 不能重复声明已存在的变量;
- let 有暂时死区,不会被提升。
2.在文章中,用的最多最经典的还是for循环里的i用var和let分别声明,从而理解var和let
重点:
- for( let i = 0; i< 5; i++) 这句话的圆括号之间,有一个隐藏的作用域
- for( let i = 0; i< 5; i++) { 循环体 } 在每次执行循环体之前,JS 引擎会把 i 在循环体的上下文中重新声明及初始化一次。
这篇文章中对变量提升做了更加详细的说明。
Closing over the loop variable considered harmful | Microsoft Docs
stackoverflow.com
你不知道的JS
本文将会继续更新。
本文详细探讨了ES6中let和var的差异,包括作用域、变量提升、暂时性死区以及块级作用域的概念。通过阮一峰的教程和方应杭的知乎分享,阐述了let如何解决内层变量覆盖外层变量以及循环计数器的全局污染问题,并强调了块级作用域的重要性。此外,还提到了let的不可重复声明特性及其在实际编程中的应用。
805

被折叠的 条评论
为什么被折叠?



