Coder Social home page Coder Social logo

es6-tutorial's Introduction

《ECMAScript 6 教程》是一本开源的 JavaScript 语言教程,全面介绍 ECMAScript 6 新引入的语法特性。

cover

本书覆盖 ES6 与上一个版本 ES5 的所有不同之处,对涉及的语法知识给予详细介绍,并给出大量简洁易懂的示例代码。

本书为中级难度,适合已经掌握 ES5 的读者,用来了解这门语言的最新发展;也可当作参考手册,查寻新增的语法点。如果你是 JavaScript 语言的初学者,建议先学完《JavaScript 语言教程》,再来看本书。

全书已由电子工业出版社出版,2017年9月推出了第三版,书名为《ES6 标准入门》。纸版内容截止到出版时,网站内容一直在修订。

es6-tutorial's People

Contributors

5unnywind avatar asplitline avatar careteenl avatar codeudan avatar condorheroblog avatar dependabot[bot] avatar geekhyt avatar hencky avatar ilyydy avatar jacty avatar liliangrong777 avatar liuxuan1-1 avatar lohoyo avatar mookiepiece avatar newbeman avatar nicong622 avatar peterwangfeng avatar qijizh avatar roc-an avatar ruanyf avatar suzhongping avatar thinkasany avatar w-l-l avatar wgm7512 avatar xt1995726 avatar yonghui-wang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

es6-tutorial's Issues

扩展运算符的应用 合并数组 第二种并不是浅拷贝

(2)合并数组

扩展运算符提供了数组合并的新写法。

const arr1 = ['a', 'b'];
const arr2 = ['c'];
const arr3 = ['d', 'e'];

// ES5 的合并数组
arr1.concat(arr2, arr3);
// [ 'a', 'b', 'c', 'd', 'e' ]

// ES6 的合并数组
[...arr1, ...arr2, ...arr3]
// [ 'a', 'b', 'c', 'd', 'e' ]
不过,这两种方法都是浅拷贝,使用的时候需要注意。

实际情况:Node@10 or node@15

const arr1 = ['a', 'b'];
const arr2 = ['c'];
const arr3 = ['d', 'e'];
const arr4 = [...arr1, ...arr2, ...arr3]
arr3[0] = "S"
console.log(arr3, arr4)// [ 'S', 'e' ] [ 'a', 'b', 'c', 'd', 'e' ]

关于《23.Class 的继承》部分的建议

新年快乐!
希望采用导图表示这些关系,理由是文字解析这些关系总是让人难懂(和作者文采没有关系,作者文采已经很棒了)。
我用mindmaster画了一幅图,
JS类的原型链
如果作者觉得可以,希望采纳。
这是一本很棒的书,以至于新春之日,都不忘拜读。阅读此书真是一大乐趣。

关于函数的扩展的 λ演算 部分

// λ演算的写法
fix = λf.(λx.f(λv.x(x)(v)))(λx.f(λv.x(x)(v)))

// ES6的写法
var fix = f => (x => f(v => x(x)(v)))
(x => f(v => x(x)(v)));
我对于上面的代码,存在问题。
首先,第一部分,直接复制进入,发现会报错“应为标识符。”
其次,第二部分,希望有个较为不错的解释,我尝试
fix((v) => {
console.log(v())
})
这样调用会报错“Maximum call stack size exceeded”,很不理解,希望作者能有所改善。
非常感谢。你的书很棒,故此我希望它能更加完美。

小小的建议

网道的字体是16px感觉有点大,能不能改成14px。还有底部能不能加一个返回顶部的按钮。

修正几处小笔误和一点小建议

  1. 此处 function1 后面多了一个数字 1

(async function1 main() {

https://github.com/wangdoc/es6-tutorial/blame/master/docs/async.md#L755

  1. 此处 unusued 字母 e 前面多了一个字母 u

var unusued = 'I have no purpose!';

https://github.com/wangdoc/es6-tutorial/blame/master/docs/style.md#L500

  1. 此处的输出应为 0 1 2,而不是 1 2 3
    it.next().value.then(o => console.log(o)) // 1
    it.next().value.then(o => console.log(o)) // 2
    it.next().value.then(o => console.log(o)) // 3

https://github.com/wangdoc/es6-tutorial/blame/master/docs/async-iterator.md#L66

  1. 以下两处的示例代码应该包在一个 async 函数里
const asyncIterable = createAsyncIterable(['a', 'b']);
const asyncIterator = asyncIterable[Symbol.asyncIterator]();
const [{value: v1}, {value: v2}] = await Promise.all([
  asyncIterator.next(), asyncIterator.next()
]);
console.log(v1, v2); // a b

https://github.com/wangdoc/es6-tutorial/blame/master/docs/async-iterator.md#L135

const writer = openFile('someFile.txt');
writer.next('hello'); // 立即执行
writer.next('world'); // 立即执行
await writer.return(); // 等待写入结束

https://github.com/wangdoc/es6-tutorial/blame/master/docs/async-iterator.md#L425

  1. 以下两处的 SharedBuffer 确切地应该改为 SharedArrayBuffer,另外变量 sharedArray[index] 的名称没有和下面 Atomics.loadAtomics.store 里的 array 对应上,建议把下面的 array 改为 sharedArray,下文也大量使用了 sharedArray 变量名做演示
Atomics.load(array, index)
Atomics.store(array, index, value)

store方法接受三个参数:SharedBuffer 的视图、位置索引和值,返回sharedArray[index]的值。load方法只接受两个参数:SharedBuffer 的视图和位置索引,也是返回sharedArray[index]的值。

  1. 此处的 移出模块模块内部模块 应该是指 移除类模块内部,下方的演示代码整体指 模块,“所有方法都是对外可见的“指的是此模块会导出此 吧。

另一种方法就是索性将私有方法移出模块,因为模块内部的所有方法都是对外可见的。

class Widget {
  foo (baz) {
    bar.call(this, baz);
  }
  // ...
}
function bar(baz) {
  return this.snaf = baz;
}

上面代码中,foo是公开方法,内部调用了bar.call(this, baz)。这使得bar实际上成为了当前模块的私有方法。

https://github.com/wangdoc/es6-tutorial/blame/master/docs/class.md#L740

  1. 下方的 “同一个my_module实例,应为同一个my_module模块

上面代码中,虽然foobar在两个语句中加载,但是它们对应的是同一个my_module实例。也就是说,import语句是 Singleton 模式。

https://github.com/wangdoc/es6-tutorial/blame/master/docs/module.md#L289

  1. 以下几段示例代码的变量名 Thunk 建议改个名,如 toThunk,理由是 Thunk 函数实际指的是使用 Thunk 转换后的函数,直接使用 Thunk 容易让人以为它才是 Thunk 函数。就如后文介绍的 thunkify,字面意思就代表它是一个转换函数,转换后的函数是 Thunk 函数。

JavaScript 语言是传值调用,它的 Thunk 函数含义有所不同。在 JavaScript 语言中,Thunk 函数替换的不是表达式,而是多参数函数,将其替换成一个只接受回调函数作为参数的单参数函数。

// 正常版本的readFile(多参数版本)
fs.readFile(fileName, callback);
// Thunk版本的readFile(单参数版本)
var Thunk = function (fileName) {
  return function (callback) {
    return fs.readFile(fileName, callback);
  };
};
var readFileThunk = Thunk(fileName);
readFileThunk(callback);

上面代码中,fs模块的readFile方法是一个多参数函数,两个参数分别为文件名和回调函数。经过转换器处理,它变成了一个单参数函数,只接受回调函数作为参数。这个单参数版本,就叫做 Thunk 函数。

任何函数,只要参数有回调函数,就能写成 Thunk 函数的形式。下面是一个简单的 Thunk 函数转换器。

// ES5版本
var Thunk = function(fn){
  return function (){
    var args = Array.prototype.slice.call(arguments);
    return function (callback){
      args.push(callback);
      return fn.apply(this, args);
    }
  };
};
// ES6版本
const Thunk = function(fn) {
  return function (...args) {
    return function (callback) {
      return fn.call(this, ...args, callback);
    }
  };
};

使用上面的转换器,生成fs.readFile的 Thunk 函数。

var readFileThunk = Thunk(fs.readFile);
readFileThunk(fileA)(callback);

下面是另一个完整的例子。

function f(a, cb) {
  cb(a);
}
const ft = Thunk(f);
ft(1)(console.log) // 1

https://github.com/wangdoc/es6-tutorial/blame/master/docs/generator-async.md#L287

  1. 以下的 “一旦遇到await就会先返回”,这里的 返回 改成 暂停 更准确,或者改成 “一旦遇到await就会先等到其后异步操作完成,再接着执行函数体内后面的语句。”

async函数返回一个 Promise 对象,可以使用then方法添加回调函数。当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。

https://github.com/wangdoc/es6-tutorial/blame/master/docs/async.md#L72

  1. 最后一点小建议
    整书里有好几处作为知识点后的演示案例,使用 实例 来代表示例,建议改用 示例应用案例 等来表述,以免和书中大量出现的 实例对象 的实例混淆。这个主要出现在章节的标题,另外其他一些地方也偶有出现。另外,JavaScript 教程 那本书中也出现了几处。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.