函数编程-2

生成器函数:被调用函数的函数体不会马上执行而是返回一个包含next方法的对象。

1、返回一个对象,对象中包含一个next方法

 2、next方法返回一个对象,该对象包含一个value属性和一个done标记属性

3、阻止函数的内部执行,通过调用next方法执行下一步,直到执行到下一个yield

function * ge(){
	console.log(123);		
}

let nextObj=ge()
console.log("还没调用next方法");
console.log(nextObj.next());

function * myGenerator(){
	console.log("我要打印1了");
	yield "1"
	console.log("我要打印2了");
	yield "2"
}
console.log("*****0****");
let mg=myGenerator();

console.log("*****1****");
console.log(mg.next());
console.log("*****2****");
console.log(mg.next());
console.log("*****3****");

输出结果:

迭代器函数:所有实现[Symbol.iterator]  方法的对象都可以使用for ...of枚举对象的属性。

函数特点:

1、返回一个对象,对象中包含一个next方法

 2、next方法返回一个对象,该对象包含一个value属性和一个done标记属性。

实现代码:

function myIterator() {
	let count = 0,
		keys = Object.entries(this),
		len = keys.length;
	return {
		next() {
			let value = keys[count++]
			return {
				value: value ? value[1] + "my" : undefined,
				done: value ? false : true
			};
		}
	}
};

var obj = {
	a: 1,
	b: 2,
	c: 4
};
var arr = [3, 4, 5]
var str = "abc"

obj[Symbol.iterator] = myIterator;
Array.prototype[Symbol.iterator] = myIterator;
String.prototype[Symbol.iterator] = myIterator;

for (var k of obj) {
	console.log(k);
}

for (var k of arr) {
	console.log(k);
}

for (var k of str) {
	console.log(k);
}

输出结果:

生成器函数实现迭代器:

function* generator() {
	let keyValues = Object.entries(this),
		len = keyValues.length;
	for (let i = 0; i < len; i++) {
		yield keyValues[i][1] + "*my"
	}
};
obj[Symbol.iterator] = generator;
Array.prototype[Symbol.iterator] = generator;
String.prototype[Symbol.iterator] = generator;

for (var k of obj) {
	console.log(k);
}

for (var k of arr) {
	console.log(k);
}

for (var k of str) {
	console.log(k);
}

输出结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值