1. 在简书上看到一个博主写的文章,感觉很有用。留下:https://www.jianshu.com/p/287e0bb867ae 
  2. Excuse me?这个前端面试在搞事!https://zhuanlan.zhihu.com/p/25407758

  3. 关于闭包:JS之经典for循环闭包问题解决方法 https://blog.csdn.net/yuli_zoe/article/details/43305855

ES6增加了很多新的语法,学习起来感觉很别扭,有时候也不理解新增加的语法有什么用,对ES6的学习也没有兴趣进而动力不足、学习效率不高。以下通过ES3、ES5、ES6的对比去实现同一个问题,可以非常容易的理解和掌握ES6的强大并产生学习的兴趣。

第1章 课程介绍

对课程整体进行介绍
  • 1-2 环境搭建  Git+webpack+JS,【git clone XXX ;git install;npm install等】项目使用webpack进行构建,使ES6的语法能在各个浏览器上显示。

第2章 ES6基础

通过对比的方式讲解常量、作用域、箭头函数、默认参数、对象代理等知识点

ES3中没有常量的概念,ES5可以用代码实现,ES6中使用const定义一个常量

//ES5中常量的写法,定义一个属性挂载到window上,writable:false控制只读
Object.defineProperty(window,"PI",{
value:'3.1405926' ,
writable:false,
})
console.log(window.PI)
window.PI = 4 //赋值无效,不报错
console.log(window.PI) //ES6中常量的写法
const PI2 ='3.1415926'
console.log(PI2)
PI2 = 4 //报错,显示PI是只读的

  

//ES5中作用域
var callbacks = []
for(var i=0;i<2;i++){
callbacks[i] = function(){ //内部闭包不执行
return i*2
}
}
console.table([
callbacks[0](), //此时执行,已经为6
callbacks[1](),
callbacks[2](),
]) //ES6中的作用域
var callbacks2 = []
for(let i=0;i<2;i++){ //使用let声明的变量具有块作用域
callbacks[i] = function(){ //内部闭包取决于当前块作用域,保存了let数据
return i*2
}
}
console.table([
callbacks2[0](), //此时执行
callbacks2[1](),
callbacks2[2](),
])

块作用域的使用,ES3/ES5中使用立即执行函数;ES6使用花括号做作用域分隔

//立即执行函数解决(fn)(),分块
;(function(){
var foo = function(){
return 1;
}
console.log('foo()===1',foo() ===1) //结果为true
;(function(){
var foo = function(){
return 2;
}
console.log('foo()===2',foo() ===2) //结果为true
})()
})() //ES6进行函数隔离,代码简洁明了
{
var foo = function(){
return 1;
}
console.log('foo()===1',foo() ===1) //结果为true
{
var foo = function(){
return 2;
}
console.log('foo()===2',foo() ===2) //结果为true
}
}

箭头函数就是函数的新语法,赋予this指向新的意义。

//ES3,ES5中函数的声明
{
var evens= [1,2,3,4,5];
var odds = evens.map(function(v){
return v+1;
})
console.log(evens,odds);
}
//ES6 箭头函数 ()=>{}
{
let evens= [1,2,3,4,5];
let odds = evens.map( v => v+1)
console.log(evens,odds); 
}

函数与this指向关系
{
//ES3、ES5函数与this指向关系
var factory = function(){
this.a = 'a';
this.b = 'b';
this.c = {
a:'a+',
b:function(){
return this.a;
}
}
}
console.log( new factory().c.b() ); //结果为 a+
}
//this的指向是该函数被调用的对象,当前函数b()的调用对象为factory().c,函数中return的this.a就是factory().c.a,所以结果为a+ {
//ES6函数与this指向关系
var factory = function(){
this.a = 'a';
this.b = 'b';
this.c = {
a:'a+',
b: ()=>{
return this.a //使用箭头函数
}
}
}
console.log( new factory().c.b() ); //结果为 a
}
//箭头函数中函数this的指向是定义时this的指向

使用箭头函数,小括号内为参数,参数只有一个可以省略;花括号中为函数,当花括号中的表达式直接作为返回值,花括号可省略。

{
//ES3/ES5中默认参数的写法
function f(x,y,z){
if(y===undefined){ y=7;}
z = z || 42
return x+y+z;
}
console.log(f(1,3)); //结果46
} {
//ES6中默认参数的写法
function f(x,y=7,z=42){
return x+y+z;
}
console.log(f(1,3));//结果46
}

  参数必选的检查

{
//校验函数参数不为空
function checkParameter(){
throw new Error('cann\'t be empty')
}
function f(x=checkParameter(),y=7,z=42){
return x+y+z;
}
console.log(f(1)); //结果为50 try(){
f(); //x为必选参数,不传报错
}catch(e){
console.log(e);
}finally{}
}

可变参数的处理(不确定参数个数的函数)

{
//ES3、ES5 可变参数
function f(){
var a = Array.prototype.slice.call(arguments);//arguments是一个伪数组
var sum = 0;
a.forEach(function(item){
sum+=item*1;
})
return sum;
}
console.log( f(1,2,3,4) ); //结果为10
}
{
//ES6 可变参数
function f(...a){ //扩展运算符,a就是一个可变参数的数组列表
var sum = 0;
a.forEach(function(item){
sum+=item*1;
})
return sum;
}
console.log( f(1,2,3,4) ); //结果为10
}

  三个点的扩展运算符还可以用于合并数组

{
//ES5 合并数组
var param = ['hello',true,7];
var other = [1,2].concat(params);
console.log(other);
}
{
//ES6 合并数组
var param = ['hello',true,7];
var other = [1,2,...params];
console.log(other);
}

ES6,ES5,ES3,对比学习~的更多相关文章

  1. 突破瓶颈,对比学习:Eclipse开发环境与VS开发环境的调试对比

    曾经看了不少Java和Android的相关知识,不过光看不练易失忆,所以,还是写点文字,除了加强下记忆,也证明我曾经学过~~~ 突破瓶颈,对比学习: 学习一门语言,开发环境很重,对于VS的方形线条开发 ...

  2. MongoDB(五)mongo语法和mysql语法对比学习

    我们总是在对比中看到自己的优点和缺点,对于mongodb来说也是一样,对比学习让我们尽快的掌握关于mongodb的基础知识. mongodb与MySQL命令对比 关系型数据库一般是由数据库(datab ...

  3. Java程序员学C#基本语法两个小时搞定(对比学习)

    对于学习一门新的语言,关键是学习新语言和以前掌握的语言的区别,但是也不要让以前语言的东西,固定了自己的思维模式,多看一下新的语言的编程思想. 1.引包 using System;java用import ...

  4. [转] Java程序员学C#基本语法两个小时搞定(对比学习)

    Java程序员学C#基本语法两个小时搞定(对比学习)   对于学习一门新的语言,关键是学习新语言和以前掌握的语言的区别,但是也不要让以前语言的东西,固定了自己的思维模式,多看一下新的语言的编程思想. ...

  5. mysql与sql server参照对比学习mysql

    mysql与sql server参照对比学习mysql 关键词:mysql语法.mysql基础 转自桦仔系列:http://www.cnblogs.com/lyhabc/p/3691555.html ...

  6. mongo语法和mysql语法对比学习

    我们总是在对比中看到自己的优点和缺点,对于mongodb来说也是一样,对比学习让我们尽快的掌握关于mongodb的基础知识. mongodb与mysql命令对比 关系型数据库一般是由数据库(datab ...

  7. JavaScript ES6 数组新方法 学习随笔

    JavaScript ES6 数组新方法 学习随笔 新建数组 var arr = [1, 2, 2, 3, 4] includes 方法 includes 查找数组有无该参数 有返回true var ...

  8. ES6中Map数据结构学习笔记

    很多东西就是要细细的品读然后做点读书笔记,心理才会踏实- Javascript对象本质上就是键值对的集合(Hash结构),但是键只能是字符串,这有一定的限制. 1234 var d = {}var e ...

  9. ICLR2021对比学习(Contrastive Learning)NLP领域论文进展梳理

    本文首发于微信公众号「对白的算法屋」,来一起学AI叭 大家好,卷王们and懂王们好,我是对白. 本次我挑选了ICLR2021中NLP领域下的六篇文章进行解读,包含了文本生成.自然语言理解.预训练语言模 ...

随机推荐

  1. 禁用大陆ip段

    https://www.ip2location.com/free/visitor-blocker 有 .htaccess web.config等 以iis为例 打开C:\Windows\System3 ...

  2. symfony-表单学习

    ---恢复内容开始--- 构成表单的几个元素 1.数据模型 M 一种比较抽象的概念,按我的理解来说,本质上就是数据的一种存在形式,可以看做一个类,一般对这些模型进行crud操作.一种是真实存在的数据模 ...

  3. webpack 打包测试和生产多个版本

    cross-env修改生产环境变量 npm i --save-dev cross-env 在package.json里这么配置 npm run build就是打包到生产环境 npm run build ...

  4. Python编程中出现ImportError: bad magic number in 'numpy': b'\x03\xf3\r\n'

    在终端输入ls -a 会出现一个.pyc的文件,将文件删掉

  5. 2017-2018 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2017)

    A. Airport Coffee 设$f_i$表示考虑前$i$个咖啡厅,且在$i$处买咖啡的最小时间,通过单调队列优化转移. 时间复杂度$O(n)$. #include<cstdio> ...

  6. 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第5章编程练习3

    #include <iostream>using namespace std;int main(){ double count=0; long double cleo=100; long ...

  7. (91)Wangdao.com第二十四天_Mutation Observer API 突变监视器

    Mutation Observer API 突变监视接口 用来监视 DOM 变动. DOM 的任何变动,比如节点的增减.属性的变动.文本内容的变动,这个 API 都可以得到通知 概念上,它很接近事件, ...

  8. 微信公众号_订阅号_微信JS-SDK网页开发

    微信JS-SDK( 分享接口很常用 ) 是微信公众平台 面向网页开发者提供的基于微信内的网页开发工具包 借助微信高效使用相机.语音.选题.位置等手机系统的能力,同时可以直接使用微信分享.扫一扫.支付等 ...

  9. 廖雪峰Python3笔记

    主要复习过一遍 简介 略 安装 略 *** 第一个Python程序 第一行的注释: # _*_ coding: utf-8 _*_ #!/usr/bin/env python3 print() 可以接 ...

  10. HttpClient参观记:.net core 2.2 对HttpClient到底做了什么?

    .net core 于 10月17日发布了 ASP.NET Core 2.2.0 -preview3,在这个版本中,我看到了一个很让我惊喜的新特性:HTTP Client Performance Im ...