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. 基于IdentityServer4的声明的授权

    ## 概述 基于Asp.net Core 1.1 ,使用IdentityServer4认证与授权. ## 参考资料 [微软教程](https://docs.microsoft.com/zh-cn/as ...

  2. C# 文件基本操作

    概括的说,File,FileInfo,FileStream是用于文件 I/O 的类,StreamReader是用于从流读取和写入流的类,使用之前都需using System.IO. 先定义一个TXT文 ...

  3. Git提交代码的小知识

    1.需要切换到项目目录下并创建一个Repository用于提交代码到这个仓库里 cd /g/....//cd后面有空格,用于进入某个项目文件夹 git init//用于创建Repository 2.添 ...

  4. linux下/etc/rc.d目录的介绍及redhat启动顺序

    init inittab rc0 rc1 rc2 rc3 rc5 rc6 rcS init.d init 系统启动超级进程 inittab 进程启动配置文件 rc0 - rc6 各启动级别的启动脚本 ...

  5. 一,python简介 笔记

    python历史 1,1989年圣诞节,Guido von Rossum开始编写python语言编译器 2,1991年2月,第一个python编译器诞生,是c语言实现的,后面又出现了c#和java版本 ...

  6. maven 学习之路之二(1)

    上次我简单讲了maven的安装和构建生命周期. 这一篇博客我将用实际项目来分享下maven整个构建生命周期的具体使用: 这次我将用maven做一个自己写程序的一个模版程序. 自己实现一个简单的页面登录 ...

  7. 时序数据库influxDB存储数据grafana展示数据

    一.influxDB简介 InfluxDB是一款用Go语言编写的开源分布式时序.事件和指标数据库,无需外部依赖.该数据库现在主要用于存储涉及大量的时间戳数据,如DevOps监控数据,APP metri ...

  8. 普元 BPS表结构参考

    BPS表结构 BPS默认采用数据库方式对业务流程的定义以及运行期的流程实例.活动.工作项等进行持久化存储.主要包括BPS流程流转相关的定义.实例.工作项.参与者相关的数据表以及和实际业务流程控制相关的 ...

  9. 递推DP(至少和至多之间的转换

    UVa 10328 - Coin Toss 题意:给你一个硬币,抛掷n次,问出现连续至少k个正面向上的情况有多少种. 转换成抛N次至多连续有N个减去抛N次至多连续有K-1个1的情况 dp[i][k]表 ...

  10. 【每日一包0001】is-sorted

    github地址:https://github.com/ABCDdouyae... is-sorted 用于判断数组是否被排序了 文档地址:https://www.npmjs.com/package/ ...