本文来自 @羯瑞 整理

ES6,并不是一个新鲜的东西,ES7、ES8已经赶脚了。但是,东西不在于新,而在于总结。

变量的新定义 let 和 const

在ES6没有被普及时,我们会用的变量定义的方法是var。其实,var对于一个刚刚接触js的人说,或许并不觉得怪异。但是,对于一个开发者而言,或许会在内心抨击它。因为它就是javascript的败笔之一,在其他语言看来的一个怪胎。那我们就来看看怪在何处呢?

  • var 可以重复定义,let 在同一个块级作用域中,不允许重复定义
var a = 10;
var a = 11;

或许,你会看到这样子的写法觉得没啥,那么你很厉(wei)害(xian)。其实,这样子的坏处不言而喻。在大型的工程化开发中,你定义一个a,我定义一个a,还有千千万万个你和我,这时,技术总监就该着急了。

同样的例子换成 let ,你会发现浏览器报错了

  • var 可随意修改,const 定义的变量不允许二次修改
var PI = 3.1415926
PI = 4.1415926

从例子中,我们可以看到,PI是一个我们经常会使用的常量,是公认的不可变动的。但在javascript中并不是如此。那天,如果你的PI被你们公司新晋的实习生改了,可能你找错误都得找半天,但这可不是实习生的锅,也许,他并不知道这里是个常量。

同样的例子换成 const ,你会发现浏览器报错了

  • var 没有块级作用域,let 和 const 定义的变量会形成块级作用域
if(true){
var i = 10;
}
console.log(i); //10

相信,这变量不存在块级作用域给我们带来过不少麻烦吧。不知道啥时候,又得在循环中套一层闭包呢。

同样的例子换成 let 、const ,你会发现浏览器报错了

  • 变量不存在变量提升
//简单的面试题
var a = 10;
function hello(){
console.log(a);
var a = 11;
console.log(a);
}
hello();

第一个console时,下面定义的变量a被提升了,所以a变成了undefined,第二个的话,就比较好理解...

使用let和const就会不一样,它们并不存在变量提升

ES5 & ES6 一些简单的代码区别

常量

//ES5
Object.defineProperty(window,'chenrf',{
configurable:'true',//类型可变
writable:'false',//值是否可变
value:'羯瑞',
})
console.log(window.chenrf); //ES6
const chenrf="羯瑞";

作用域

//ES5
var cb2=[];
for(var a=0;a<3;a++){
cb2[a]=function(){
return a;
}
}
console.log([cb2[0](),cb2[1](),cb2[2]()]); //[1,2,3] //ES6
let cb=[];
for(let a=0;a<3;a++){
cb[a]=function(){
return a;
}
}
console.log([cb[0](),cb[1](),cb[2]()]); //[3,3,3]

箭头函数

//es5
var es5 = function(){
var a='chenrf-es5';
return a;
} //es6
let es6=()=>{
let a='chenrf-es6';
return a;
}
console.log(es5()); //cherrf-es5
console.log(es6()); //chenrf-es6

默认参数

let es6=(a='chenrf-es6')=>{
return a;
}
console.log(es6()); //chenrf-es6
console.log(es6('chenrf')); //chenrf

this指向

var obj = {
i: 10,
//如果是直接return,可以不需要{}
b: () => this,
c: function() {
return this;
}
}
console.log(obj.b()); //{}
console.log(obj.c()); //{ i: 10, b: [Function: b], c: [Function: c] }

...剩余参数

// => abc 等价于 return abc;es6语法
let addFun=(...abc)=> abc;
console.log(addFun(1,2,3)); //[1,2,3]
console.log(addFun(1,2,3,4,5,7)); //[1,2,3,4,5,7]

总结

ES6还有很多新特性,如果你还想深入ES6进行了解的话,最直接的方式就是看书。希望你的代码写的越来越优雅。

前端读者 | ES6知识点概述的更多相关文章

  1. 前端开发面试知识点大纲--摘自jackyWHJ

    前端开发面试知识点大纲:HTML&CSS:    对Web标准的理解.浏览器内核差异.兼容性.hack.CSS基本功:布局.盒子模型.选择器优先级及使用.HTML5.CSS3.移动端适应 Ja ...

  2. Web前端-CSS必备知识点

    Web前端-CSS必备知识点 css基本内容,类选择符,id选择符,伪类,伪元素,结构,继承,特殊性,层叠,元素分类,颜色,长度,url,文本,字体,边框,块级元素,浮动元素,内联元素,定位. 链接: ...

  3. ES6的新特性(1)——ES6 的概述

    ES6 的概述 首先,感谢马伦老师的ES6新特性的教程. ECMAScript 和 JavaScript 的关系是 ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前 ...

  4. 1+x 证书 Web 前端开发 MySQL 知识点梳理

    官方QQ群 1+x 证书 Web 前端开发 MySQL 知识点梳理 http://blog.zh66.club/index.php/archives/199/

  5. 【前端开发】ES6知识点系统化梳理笔记

    >ES6扩展: #Map和Set是es6标准新增的数据类型 ##Map是key-value(关键字-值),Map允许修改value,不允许修改key,Map支持下标操作 var m = new ...

  6. 前端Vscode常用插件概述

    以下是我自己在工作中常用的插件,写给刚入门的前端coder.VSCode插件商店中实用的插件还是很多的,大家也可以对感兴趣的插件下载下来尝试一下的! 持续更新 插件名称 概述 作用 常用默认快捷键 C ...

  7. web前端--知识点,笔记叠加(javascript,jquery,html5+css3.0,ajax)

    函数传参列表,获取方法arguments的使用 function arg(){ var str = '总共传了'+arguments.length+'个参数\n'; for(var i=0;i< ...

  8. java多线程知识点概述

    这里只起一个概述的作用,极其简单的列一下知识点,需要在脑海中过一下,如果哪些方面不熟悉的话,建议利用网络资源去学习. 1.线程.进程概念 概念 线程状态及其转换 2.死锁.预防.解决 3.jdk线程实 ...

  9. ES6知识点大汇总

    1 //1.搭建ES6的开发环境: 2 let a=1; 3 console.log(a); 4 //2.var 声明的是全局变量 全局变量会污染外部的区块 5 //let 局部变量 6 //cons ...

随机推荐

  1. (转)关于block使用的5点注意事项

    1.在使用block前需要对block指针做判空处理. 不判空直接使用,一旦指针为空直接产生崩溃. if (!self.isOnlyNet) { if (succBlock == NULL) { // ...

  2. JQuery学习四(过滤选择器)

    :first选择第一个元素.$(“div:first”)进行选择第一个<div> :last 选择最后一个最后一个元素 $("div:last")选取最后一个<d ...

  3. POJ 3254 状态压缩 DP

    B - Corn Fields Crawling in process... Crawling failed Time Limit:2000MS     Memory Limit:65536KB    ...

  4. css-box-shadow

    .arti_type_shadow { position: absolute; width: 100%; height: 6px; left:; right:; background-image: u ...

  5. [freemarker篇]02.生成HTML的静态页面

    昨天完成了一部分的今天在上次的基础上,完成完成生成HTML静态页面的操作,中间会涉及一点标签的简单使用.今天的代码有一丢丢的对付的感觉!抱歉了,直接就上代码吧!求原谅! 项目结构目录如下: 第一步,新 ...

  6. [技巧篇]16.MyEclipse2014安装SVN插件,在线安装

    这两天想做点东西,但是现在流行的是git,但是军哥的项目是托管到阿里的svn代码当中,所以没有办法,还需要弄SVN,这里不将什么安装SVN等东西 我要求的就是快速入门而已,仅此而已,我安装成功,过程很 ...

  7. MongoDB入门(6)- 我们自己封装的MongoDB-C#版本

    Wisdombud.Mongo 包含内容 MongoDB.Bson.dll MongoDB.Bson.xml MongoDB.Driver.dll MongoDB.Driver.xml Wisdomb ...

  8. Android应用自动更新功能的代码实现(转)

    由于Android项目开源所致,市面上出现了N多安卓软件市场.为了让我们开发的软件有更多的用户使用,我们需要向N多市场发布,软件升级后,我们也必须到安卓市场上进行更新,给我们增加了工作量.因此我们有必 ...

  9. java有关Time类型数据的接收和转换

    一:前言 有关Time的时间其实很少有用到.但是用到就很纠结了,转换和保存,都是烦人的事情,我自己就在这上面吃过一个亏,所以就加载下来吧! 二:内容 (1):被坑的地方 实体类 import java ...

  10. 地精排序Gnome Sort

    号称最简单的排序算法,只有一层循环,默认情况下前进冒泡,一旦遇到冒泡的情况发生就往回冒,直到把这个数字放好为止 直接看它排序的过程,待排数组[6 2 4 1 5 9] 先设计一个标识i=0然后从头开始 ...