1.如何学习ES6

1.1 js的学习顺序

ES5 -> ES6 -> ES7 -> ES8 以此类推

ES5没学好就别想学好ES6

1.2 边学边用

学了就要用

2.变量声明的方式

    a = 1
var a = 1
// 上面两个是ES3的语法,下面两个是ES6的语法
let a = 1
const a = 1

2.0 块级作用域 {}

看mdn

2.1 a = 1 会声明一个全局变量 吗?

    var a

    function fn1() {
var a
fn2 function fn2() {
a = 1
console.log(window.a) // undefined
}
} fn1()

显然 当var声明了全局变量后,a = 1 是无法再声明全局变量的,只能对其赋值
结论:a = 1 含义不明

2.2 var 的问题

    function fn() {
if (true) {
console.log(a) // undefined
} else {
// 下面的代码不会执行
var a
console.log(a)
}
} fn()

哪怕var没有被执行,变量也会被提升
也就是说 var声明的变量没有块级作用域 , 而js程序员为了让var有块级作用域,通常使用的方式是立即执行函数

所有的var建议写在第一行 —— 《js语法精髓》

2.3 let

2.3.1 let的由来

下面我我们来写段代码
目的是只暴露一个全局变量 blues
用var来写
1.需要一个立即执行函数 2.需要一个函数把a包起来

    (
function () {
var a = 1 window.blues = function () {
console.log(a) // 1
}
}
)()

用let来写

    {
let a = 1
window.blues = function () {
console.log(a) // 1
}
}
blues()
console.log(a) // a is not defined

let 的特点

  1. let的作用域在最近的 {} 之间
  2. let不能重复声明【。。就算用var也不会有人重复声明把^_^】
  3. 使用let声明的变量在块级作用域内能强制执行更新变量【看mdn最后一个for循环例子
  4. let的临时死区【temp dead zone】—— 如果你在 let a 之前使用a,报错
    {
let a = 1
{
console.log(a) // a is not defined
let a = 2
}
}
// 这培养了我们一个好习惯 —— 所有的变量声明都要写在前面

test

if (true) {
let a = 1
} else {
let a = 2
}
console.log(a) // ??? // answer:a is not defined

简单理解let —— let就看它在哪个花括号里

2.4 const

const和let一样,只有一个区别 —— 只有一次赋值机会,且必须在声明的时候就赋值
const:英文意思 常量 —— 固定一个值

    {
const a = 1
console.log(a) // 1
a = 2
console.log(a) // 报错 —— Assignment to constant variable.[给常量赋值(是错的)]
}

用const的情况

    {
const PI = 3.1415926
}

3.let的扩展

用let解决for循环中onclick问题

HTML部分

<ul>
<li>导航1</li>
<li>导航2</li>
<li>导航3</li>
<li>导航4</li>
<li>导航5</li>
<li>导航6</li>
</ul>

JS部分

先看用var来写

    var liTags = document.querySelectorAll('li')

    for (var i = 0; i < liTags.length; i++) {
// 使用立即执行函数,var j 就不会跑到外面去(不会被提升)
(function () {
var j = arguments[0]
liTags[j].onclick = function () {
console.log(j)
}
})(i)
}

mdn的写法

    for (let i = 0; i < liTags.length; i++) {
// 注意i的作用域就在上面的 () 里
// 不过for循环在使用let的时候自动做了一个魔法
// let j = i // js自动加的 // 过程是这样的
// 下面这3行代码执行之前 —— 块里面的i = ()里面的i
liTags[i].onclick = function () {
console.log(i)
}
// 上面3行代码执行后 —— ()里面的i = 块里面的i
}

如果我的解释你看不懂的话,希望你能看懂下面的代码

    for (var _i = 0; _i < liTags.length; _i++) {
let j = _i
liTags[j].onclick = function () {
console.log(j)
}
}

4.永远别再用var了:)

ES6指北【1】——let、const的更多相关文章

  1. 可能比文档还详细--VueRouter完全指北

    可能比文档还详细--VueRouter完全指北 前言 关于标题,应该算不上是标题党,因为内容真的很多很长很全面.主要是在官网的基础上又详细总结,举例了很多东西.确保所有新人都能理解!所以实际上很多东西 ...

  2. ES6 入门系列 - let 和 const 命令

    let命令 基本用法 ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. { let a = ; ; } a // ReferenceEr ...

  3. 常用STL使用指北

    常用STL使用指北 set和multiset set和multiset都是基于红黑树(显然是一个二叉搜索树)的STL. 定义 我们可以使用(multi)set<元素类型>名称来定义一个(m ...

  4. Angular 从入坑到挖坑 - Router 路由使用入门指北

    一.Overview Angular 入坑记录的笔记第五篇,因为一直在加班的缘故拖了有一个多月,主要是介绍在 Angular 中如何配置路由,完成重定向以及参数传递.至于路由守卫.路由懒加载等&quo ...

  5. es6学习笔记--let和const

    今天学习了es6中的let和const命令,借此整理一下笔记. let : let 和 var 的声明方式一样,但有 var 比不上的优点.下面用 var 和 let 的例子来加深对 let 的理解. ...

  6. git宝典—应付日常工作使用足够的指北手册

    最近公司gitlab又迁移,一堆git的命令骚操作,然鹅git命令,感觉还是得复习下——其实,git现在界面操作工具蛮多,比如intellij 自带的git操作插件就不错,gitlab github ...

  7. Python 简单入门指北(二)

    Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...

  8. Python 简单入门指北(一)

    Python 简单入门指北(一) Python 是一门非常容易上手的语言,通过查阅资料和教程,也许一晚上就能写出一个简单的爬虫.但 Python 也是一门很难精通的语言,因为简洁的语法背后隐藏了许多黑 ...

  9. 关于supervisor的入门指北

    关于supervisor的入门指北 在目前这个时间点(2017/07/25),supervisor还是仅支持python2,所以我们要用版本管理pyenv来隔离环境. pyenv 根据官方文档的讲解, ...

随机推荐

  1. loj 2392「JOISC 2017 Day 1」烟花棒

    loj 答案显然满足二分性,先二分一个速度\(v\) 然后显然所有没有点火的都会往中间点火的人方向走,并且如果两个人相遇不会马上点火,要等到火快熄灭的时候才点火,所以这两个人之后应该在一起行动.另外有 ...

  2. 7、Linux权限管理-基本权限

    1.权限概述 1.1.什么是权限? 我们可以把它理解为操作系统对用户能够执行的功能所设立的限制,主要用于约束用户能对系统所做的操作,以及内容访问的范围,或者说,权限是指某个特定的用户具有特定的系统资源 ...

  3. 实验吧flag整理

    奇怪的短信 flagissimple 围在栅栏里的爱ILOVESHIYANBAR. 古典密码flag:CTF{COULDYOUEXCHANGETHEINFORMATION} The Flash-14F ...

  4. 2019/9/18 IIS服务器 ftp站安装:隔离模式

    net user ftp1  /add 添加两个账户 在d盘下创建ftp站的文件夹ftptest,进入文件夹,创建文件夹LocalUser,进入LocalUser 分别创建administrator ...

  5. VirtualBox给CentOS虚拟机挂载磁盘扩大空间

    VirtualBox给CentOS虚拟机挂载磁盘扩大空间 楼主,发现虚拟机使用存储空间不够用的情况,需要改虚拟机挂载磁盘,扩容,在网上找了一波资料,于是整合记录操详细作如下: 概要步骤如下: 1.设置 ...

  6. 架构师成长之路5.7-Saltstack数据系统

    点击架构师成长之路 架构师成长之路5.7-Saltstack数据系统 1. Saltstack的两种数据系统 Grains Pollars 2. Saltstack数据系统---Grains Grai ...

  7. 咕qwq

    ccsp回来之后一直肚子难受,到现在还没好. 下午去人民医院急诊做了个CT,医生说是有问题的,但她看不出来,让我明天早起挂专家号去QAQ. UPD:初步诊断是胀气.医生让我先吃两天抗生素...

  8. python生成器并行实例

    生成器并行实例: send发送值被yield接受到赋值给baozi变量 #yield作用只是在这里保存这个值的当前状态然后返回之后在调用next,又回到yield #单纯调用next不会给yield传 ...

  9. Kubernetes 编排神器之 Helm

    什么是Kubernetes Helm?为什么要使用Helm? 前言 编写一堆Kubernetes配置文件是一件很麻烦的事情.对于一些容器,我们可能需要10多个yaml文件.维护它们是一个问题,而且在不 ...

  10. UVA - 11996 Jewel Magic (Treap+二分哈希)

    维护一个01序列,一共四种操作: 1.插入一个数 2.删除一个数 3.反转一个区间 4.查询两个后缀的LCP 用Splay或者Treap都可以做,维护哈希值,二分求LCP即可. 注意反转序列的时候序列 ...