We have a problem with promises

下面的四种 promises 的区别是什么

1
2
3
4
5
6
7
8
9
10
11
doSomething().then(function () {  
return doSomethingElse();
});

doSomething().then(function () {
doSomethingElse();
});

doSomething().then(doSomethingElse());

doSomething().then(doSomethingElse);

阅读更多

深入浅出ES6笔记

ES6 是什么

  • 编程语言 JavaScript 是 ECMAScript 的实现和扩展,由 ECMA(一个类似 W3C 的标准组织)参与进行标准化。
  • ES4 饱受争议,当标准委员会最终停止开发 ES4 时,其成员同意发布一个相对谦和的 ES5 版本,随后继续制定一些更具实质性的新特性。这一明确的协商协议最终命 名为“Harmony”(ES6)。
  • 2009 年发布的改进版本 ES5,引入了 Object.create()、Object.defineProperty()、getters 和 setters、严格模式以及 JSON 对象。
  • 如果你想在 web 环境中使用这种新语法,同时需要支持 IE 和 Safari, 你可以使用 Babel 或 Google 的 Traceur 这些编译器来将你的 ES6 代码翻译为 Web 友好 的 ES5 代码。

阅读更多

三亚春节


在三亚过的春节,也没怎么出去玩……

阅读更多

ES6-Module

ES6的Class只是面向对象编程的语法糖,升级了ES5的构造函数的原型链继承的写法,并没有解决模块化问题。Module功能就是为了解决这个问题而提出的。
在ES6之前,社区制定了一些模块加载方案,最主要的有CommonJS和AMD两种。前者用于服务器,后者用于浏览器。ES6在语言规格的层面上,实现了模块功能,而且实现得相当简单,完全可以取代现有的CommonJS和AMD规范,成为浏览器和服务器通用的模块解决方案。

// CommonJS模块
let { stat, exists, readFile } = require('fs');

上面代码的实质是整体加载fs模块(即加载fs的所有方法),生成一个对象(_fs),然后再从这个对象上面读取3个方法。这种加载称为“运行时加载”,因为只有运行时才能得到这个对象,导致完全没办法在编译时做“静态优化”。

阅读更多

ES6-Module

规格文件

规格文件是计算机语言的官方标准,详细描述语法规则和实现方法。
ECMAScript 6的规格,可以在ECMA国际标准组织的官方网站(www.ecma-international.org/ecma-262/6.0/)免费下载和在线阅读。

阅读更多

ES6-Class基本语法

Class基本语法

ES6的class可以看作只是一个语法糖,它的绝大部分功能,ES5都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。

// old
function Point(x,y){
this.x = x;
this.y = y;
}
Point.prototype.toString = function () {
return ‘(‘ + this.x + ‘, ‘ + this.y + ‘)’;
}
// new
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
toString() {
return ‘(‘ + this.x + ‘, ‘ + this.y + ‘)’;
}
}

阅读更多

北京大雪


北京难得一见的大雪,冰天雪地的很好看。

阅读更多

蓝色港湾跨年夜


跨年夜无聊去蓝色港湾看灯展,还是挺好看的。

阅读更多

ES6-Generator函数

基本概念

Generator函数是ES6提供的一种异步编程解决方案
Generator函数有两个特征。一是,function命令与函数名之间有一个星号;二是,函数体内部使用yield语句,定义不同的内部状态。
调用Generator函数后,该函数并不执行,返回的是一个指向内部状态的指针对象(遍历器对象)。下一步,必须调用遍历器对象的next方法,使得指针移向下一个状态。也就是说,每次调用next方法,内部指针就从函数头部或上一次停下来的地方开始执行,直到遇到下一个yield语句(或return语句)为止。

function* helloWorldGenerator() {
  yield 'hello';
  yield 'world';
  return 'ending';
}
var hw = helloWorldGenerator();
hw.next() // { value: 'hello', done: false }
hw.next() // { value: 'world', done: false }
hw.next() // { value: 'ending', done: true }
hw.next() // { value: undefined, done: true }

每次调用遍历器对象的next方法,就会返回一个有着value和done两个属性的对象。value属性表示当前的内部状态的值,是yield语句后面那个表达式的值;done属性是一个布尔值,表示是否遍历结束。

阅读更多

香山红叶节


老早爬起来去香山看红叶,没有想象中的那么好,红叶不多,可能去的还不是时候。

阅读更多