Generator 与协程

浏览: 10 2019年08月19日
Generator 与协程协程(coroutine)是一种程序运行的方式,可以理解成“协作的线程”或“协作的函数”。协程既可以用单线程实现,也可以用多线程实现。前者是一种特殊的子例程,后者是一种特殊的线程。(1)协程与子例程的差异传统的“子例程”(subroutine)采用堆栈式“后进先出”的执...

Generator与状态机

浏览: 8 2019年08月19日
Generator 与状态机Generator 是实现状态机的最佳结构。比如,下面的clock函数就是一个状态机。var ticking = true;var clock = function() { if (ticking) console.log('Tick!'); else ...

es6 Generator 函数的this

浏览: 44 2019年08月13日
Generator 函数总是返回一个遍历器,ES6 规定这个遍历器是 Generator 函数的实例,也继承了 Generator 函数的prototype对象上的方法。function* g() {}g.prototype.hello = function () { return 'hi!'...

es6 作为对象的属性是 Generator 函数

浏览: 36 2019年08月12日
如果一个对象的属性是 Generator 函数,可以简写成下面的形式。let obj = { * myGeneratorMethod() { ··· }};上面代码中,myGeneratorMethod属性前面有一个星号,表示这个属性是一个 Generator 函数。它的完整形式如下,...

es6 yield* 表达式

浏览: 54 2019年08月08日
如果在 Generator 函数内部,调用另一个 Generator 函数。需要在前者的函数体内部,自己手动完成遍历。function* foo() { yield 'a'; yield 'b';}function* bar() { yield 'x'; // 手动遍历 foo() f...

es6 next()、throw()、return() 的共同点

浏览: 67 2019年08月06日
next()、throw()、return()这三个方法本质上是同一件事,可以放在一起理解。它们的作用都是让 Generator 函数恢复执行,并且使用不同的语句替换yield表达式。next()是将yield表达式替换成一个值const g = function* (x, y) { let ...

Generator.prototype.return()

浏览: 71 2019年08月05日
定义Generator 函数返回的遍历器对象,还有一个return方法,可以返回给定的值,并且终结遍历 Generator 函数。示例function* gen() { yield 1; yield 2; yield 3;}var g = gen();g.next() // ...

Generator.prototype.throw()

浏览: 68 2019年08月01日
Generator 函数返回的遍历器对象,都有一个throw方法,可以在函数体外抛出错误,然后在 Generator 函数体内捕获。var g = function* () { try { yield; } catch (e) { console.log('内部捕获', e); ...

for...of 循环自动遍历 Generator 函数

浏览: 81 2019年07月31日
for...of循环可以自动遍历 Generator 函数运行时生成的Iterator对象,且此时不再需要调用next方法。function* foo() { yield 1; yield 2; yield 3; yield 4; yield 5; return 6;}for (le...

next方法的参数

浏览: 89 2019年07月30日
定义next方法的参数:yield表达式本身没有返回值,或者说总是返回undefined。next方法可以带一个参数,该参数就会被当作上一个yield表达式的返回值。示例function* f() { for(var i = 0; true; i++) { var reset = yie...

es6 Generator函数与 Iterator 接口的关系

浏览: 88 2019年07月29日
上一章说过,任意一个对象的Symbol.iterator方法,等于该对象的遍历器生成函数,调用该函数会返回该对象的一个遍历器对象。由于 Generator 函数就是遍历器生成函数,因此可以把 Generator 赋值给对象的Symbol.iterator属性,从而使得该对象具有 Iterator...

es6 yield表达式

浏览: 94 2019年07月28日
yield 表达式由于 Generator 函数返回的遍历器对象,只有调用next方法才会遍历下一个内部状态,所以其实提供了一种可以暂停执行的函数。yield表达式就是暂停标志。遍历器对象的next方法的运行逻辑如下。(1)遇到yield表达式,就暂停执行后面的操作,并将紧跟在yield后面的那...

es6 Generator 函数的基本概念

浏览: 91 2019年07月26日
基本概念Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同。本章详细介绍 Generator 函数的语法和 API,它的异步编程应用请看《Generator 函数的异步应用》一章。Generator 函数有多种理解角度。语法上,首先可以把它理解成,Gene...

es6的for...of循环详解

浏览: 84 2019年07月25日
ES6 借鉴 C++、Java、C# 和 Python 语言,引入了for...of循环,作为遍历所有数据结构的统一的方法。一个数据结构只要部署了Symbol.iterator属性,就被视为具有 iterator 接口,就可以用for...of循环遍历它的成员。也就是说,for...of循环内部...

es6 遍历器iterator的return(),throw()

浏览: 94 2019年07月23日
遍历器对象除了具有next方法,还可以具有return方法和throw方法。如果你自己写遍历器对象生成函数,那么next方法是必须部署的,return方法和throw方法是否部署是可选的。return方法的使用场合是,如果for...of循环提前退出(通常是因为出错,或者有break语句),就会...

es6 迭代器Iterator和生成器Generator

浏览: 116 2019年07月19日
Symbol.iterator方法的最简单实现,还是使用下一章要介绍的 Generator 函数。let myIterable = { [Symbol.iterator]: function* () { yield 1; yield 2; yield 3; }}[...my...

es6 字符串的Iterator接口

浏览: 90 2019年07月19日
定义字符串是一个类似数组的对象,也原生具有 Iterator 接口示例var someString = "hi";typeof someString[Symbol.iterator]// "function"var iterator = someString[Symbol.iterator]()...

es6 调用 Iterator 接口的场合

浏览: 104 2019年07月16日
描述有一些场合会默认调用 Iterator 接口(即Symbol.iterator方法),除了下文会介绍的for...of循环,还有几个别的场合。示例(1)解构赋值对数组和 Set 结构进行解构赋值时,会默认调用Symbol.iterator方法let set = new Set().add('...

es6中默认 Iterator 接口

浏览: 106 2019年07月15日
定义描述Iterator 接口的目的,就是为所有数据结构,提供了一种统一的访问机制,即for...of循环(详见下文)。当使用for...of循环遍历某种数据结构时,该循环会自动去寻找 Iterator 接口。一种数据结构只要部署了 Iterator 接口,我们就称这种数据结构是“可遍历的”(i...

es6 Iterator(遍历器)的概念

浏览: 89 2019年07月12日
概念(定义)JavaScript 原有的表示“集合”的数据结构,主要是数组(Array)和对象(Object),ES6 又添加了Map和Set。这样就有了四种数据集合,用户还可以组合使用它们,定义自己的数据结构,比如数组的成员是Map,Map的成员是对象。这样就需要一种统一的接口机制,来处理所有...