说到迭代,也许大多数人都想到循环,但是迭代和周期不是等效的,循环是迭代机制的基础。那么什么是迭代?个人理解相同的部分是按顺序重复执行的,通常是在悬挂条件明确的情况下进行的。
两个高级别的功能被添加到Ecmasixpript 6规范中:迭代器和发电机,迭代概念直接带入核心语言,并提供了一个定义周期的机制。
本文将探讨这两个新功能。
迭代协议专门分为迭代协议和迭代器。
迭代协议允许JavaScript对象定义或自定义其迭代行为。
如果对象成为可用对象,则必须实现该方法,即,对象(或原型链上的某个对象)必须具有一个键作为属性,该属性可以通过常数访问属性。
一个对象成为迭代对象的条件:实现方法:无参数函数,其返回值是符合迭代器协议的对象。
:一个没有参数或接受参数的函数,返回应具有以下两个属性的对象:
以下代码中的对象符合迭代协议和迭代器协议:
在JavaScript中,迭代器是一个定义序列的对象,并在悬挂式时可能会返回返回值。特别是,迭代器是通过使用方法的迭代器协议的对象。
此外,迭代器是按需创建的一次性对象。east迭代器与迭代对象关联,迭代器将揭示迭代的迭代API,以迭代对象。迭代器不需要了解与之相关的迭代对象的结构,并且只有它需要知道如何获得连续价值。
创建后,可以通过重复调用next()。迭代迭代器被称为该迭代器,因为它只能执行一次。: 真的}。
例如,构建的迭代对象(数组)就是一个示例。它包含属性,调用方法将生成迭代器,然后使用迭代器的迭代器:
如上所述,有必要实现迭代对象,并且必须将其实现为迭代器对象。因此,通常可以以以下形式编写自定义的迭代器。
一些迭代器也在内部实现,并且将返回相同的迭代器。
迭代设备中的可选方法用于指定迭代器预先关闭时执行的逻辑。
提前关闭迭代器的情况包括:
让计数=新计数器(3);for(让i的i){if(i> 1)
休息;
console.log(i);
} // 1 //提前关闭!
定制器是一个有用的工具,但是由于需要在显示屏中显示,因此需要仔细创建它。ES6提供了生成器结构。在介绍生成器函数之前,我们将介绍与生成器相关的一些基本知识。
生成器对象是由发电机函数返回的迭代器,并且符合迭代协议和迭代器。
生成器的原型包含以下三种方法:
方法返回一个包含属性和属性的对象。此方法还可以传递参数以将值传递给生成器。
语法:
令geen = generator();//“ generator {}” console.log(geen.next(10));// {值:1,do:false} console.log(gen.next(9)); // {值:2,完成:false} console.log(gen.next());// {值:3,完成:false} console.log(geen.next(8));
// a = 9,b =不确定,c = 8 // {值:undefined,do:true}
语法:
语法:
关键字实际返回一个具有两个属性的对象,并且该属性是表达式值的结果,但这意味着生成器函数尚未完全完成。
*`farrevenrator`或迭代对象。
:返回迭代对象的表达。
var geen = generator();console.log(geen.next());// {值:1,do:false} console.log(geen.next());// {value:不确定,做:true}
变量结果;
function Generator(){result = farref emotengenerator();}
var = generator();
console.log(iterator.next());// {值:1,do:false} console.log(iterator.next());// {value:不确定,做:true}
console.log(结果);//“ foo” //如果另一个Gianrator函数不显示“ foo”,则结果的值是未定义的
//发电机函数表达式让GeneratorFn = function*(){}
//作为一个对象属于该类型,生成了生成器函数OBJ = {
//类方法方法类的生成器函数foo = {
//创建Generator函数GeneratorFn = new GeneratorFunction();console.log(generatorFn);//?* anonymous(){}
注意:不建议使用这种生成发电机功能的方法
(1)生成器函数通常执行生成器函数:
上述执行过程如下:
(2)带有参数的发电机函数生成器也可以接收参数
(3)每次调用发电机方法时,发电机悬架或结束的调节器都会执行,发电机将恢复执行,直到达到以下值:
令geen = generator();//“生成器{}” //遇到屈服暂停并返回生成器的新值console.log(geen.next());// {值:1,do:false} console.log(geen.next());// {值:2,do:false}
//到发电机函数的末尾,生成器的执行结束console.log(geen.next());// {value:不确定,做:true}
令geen = generator();//“ generator {}” console.log(geen.next());// {值:1,do:false} console.log(geen.next())); error console.log(geen.next());//此语句将不会继续执行
另外,如果提供了参数,则如果提供了参数,则将参数设置为返回对象的属性值。
当涉及到迭代器和发电机时,请了解以下内容
该语句在迭代对象上创建一个迭代周期,调用自定义迭代钩,并执行每个不同属性的值的语句
语法
两者都是迭代的。它们之间的主要区别是它们的迭代。
for(让i in arr){console.log(i);
} // 0 // 1
for(让ir){console.log(i);
} // a // b