ECMAScript 6 一些有意思的特性
主要参考了下面两篇博文,对ES6的新特性做一些笔记,加深印象
*号函数 迭代函数生成器
我能想到的生成器使用场景有两点,一个是类似类静态变量,一个是类似toggle的切换场景,还有就是异步阻塞程序。
function *myGenerator() {
console.log('step1');
yield 1;
console.log('step2');
yield 2;
console.log('step3');
return 3;
}
let g = myGenerator();
while(true) {
let curr = g.next();
if (g.done) {
console.log(g.value);
break;
} else {
console.log(g.value);
}
}
箭头函数
箭头函数不绑定 this 和 arguments. 通常可以作为匿名函数的简写。这个特殊的特性可以在一些场景提供简洁的代码,同时也会在某些场景带来问题。this 一般是指向当前函数体,
// arrow function
let a = {
word: 'hello',
say: function(){
setTimeout(() => {
console.log(this.word);
}, 0);
}
}
let b = {
word: 'world',
say: function() {
setTimeout(function() {
console.log(this.word);
}, 0);
}
}
a.say(); // hello
b.say(); // undefined.
变量声明 let, const VS var
const 比较简单,不多表
let 的作用范围在 {} 结构体中,比如for,if,object。 而 var 作用范围在函数体中
for (var i = 0; i < 3; i++) {
(function(i) {
setTimeout(function () {
console.log(`var: ${i}`);
}, i * 1000);
})(i);
}
console.log(`after for var: ${i}`);
for (let x=0; x<3; x++) {
setTimeout(function () {
console.log(`let: ${x}`)
}, x * 1000);
}
// console.log(`after var var: ${x}`); // error
模板字符串
对于经常在前端拼接html与js变量的我来说,无疑是一个福音。而且语法跟php几乎没有区别
`反引号之间的变量${some_var}会被替换赋值`
函数默认值,解构,展开
支持像其他语言一样使用函数默认值,跟 || 说再见。
解构 是指 类似php的 list 语法,或者python的tuple语法。注意数组和对象的区别: [v1,v2] = ['value2', value2]; {name, value} = {name:'xx', value:'yy'}
展开运算符,用于数组和对象的拼接,还有就是箭头函数的默认传参(类似python中的 *args, **kwargs),数组参数调用(func.apply(null, arr)):
//数组
const color = ['red', 'yellow']
const colorful = [...color, 'green', 'pink']
console.log(colorful) //[red, yellow, green, pink]
//对象
const alp = { fist: 'a', second: 'b'}
const alphabets = { ...alp, third: 'c' }
console.log(alphabets) //{ "fist": "a", "second": "b", "third": "c"
Promises
异步程序的同步写法。本质是把 ok_callback(resolve) 和 err_callback (reject) 封装了一下。然后同过then 调用 resolve 方法,catch 调用 reject 方法。
最新文章
- QQ空间HD(2)-UIPopoverController其它使用
- F2工作流引擎模型
- Spring AOP 完成日志记录
- ASP.NET中GridView控件删除数据的两种方法
- Entity Framework访问MySQL数据库的存储过程并获取返回值
- Github学习之路-初出茅庐,接触Github,了解Github
- 网站首页title 里显示ico图标
- &ldquo;Sysprep 错误 + CAPI2 引起的蓝屏&rdquo;的参考解决方法
- git同步远端的分支
- Double跟double
- sqlserver 批量删除相同前缀名的表
- iOS 推送全解析,你不可不知的所有 Tips!
- iOS开发实战-时光记账Demo 本地数据库版
- 30分钟掌握ES6/ES2015核心内容(下)
- MFC编程汇总
- django-pure-pagination 组件使用
- Python中xlrd和xlwt模块使用方法
- 简单Gif制作
- WebLogic配置JNDI数据源
- Sprig 面试中 问及 DI,IOC, AOP