加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
53-什么是生成器函数.html 5.25 KB
一键复制 编辑 原始数据 按行查看 历史
wangcai 提交于 2023-04-04 16:49 . xx‘
<meta charset="utf-8">
<!-- <script>
// 迭代器和可迭代对象学习
// 生成器函数:
// 1.function后面会跟上符号: *
// 2.代码的执行可以被yield控制
// 3.生成器函数默认在执行时, 返回一个生成器对象
// * 要想执行函数内部的代码, 需要生成器对象, 调用它的next操作
// * 当遇到yield时, 就会中断执行
// 生成器函数
function* fn() {
console.log("aaa");
console.log("bbb");
yield
console.log("ccc");
console.log("ddd");
yield
console.log("eee");
console.log("fff");
}
// 调用生成器函数,得到生成器对象
// generator 是生成器的意思
let generator = fn();
// 生成器也有一个next方法
generator.next()
generator.next()
generator.next()
</script> -->
<!-- <script>
// 生成器函数
// yield叫产出 产出数据
function* fn() {
console.log("aaa");
console.log("bbb");
yield "1"
console.log("ccc");
console.log("ddd");
yield "2"
console.log("eee");
console.log("fff");
}
let generator = fn();
// 第1次调用next就执行第1个yield之前的代码
// 第2次调用next就执行第2个yield之前的代码
// ...
console.log(generator.next()); // {value: '1', done: false}
console.log(generator.next()); // {value: '2', done: false}
console.log(generator.next()); // {value: undefined, done: false}
</script> -->
<!-- <script>
// 生成器函数
// yield叫产出 产出数据
function* fn() {
console.log("aaa");
console.log("bbb");
let num1 = yield "1"
console.log("num1:",num1);
console.log("ccc");
console.log("ddd");
let num2 = yield "2"
console.log("num2:",num2);
console.log("eee");
console.log("fff");
}
let generator = fn();
// 第1次调用next就执行第1个yield之前的代码
// 第2次调用next就执行第2个yield之前的代码
// ...
// 调用next时,可以给生成器函数传递参数 参数传递到yield前面
console.log(generator.next('666')); // {value: '1', done: false}
console.log(generator.next('888')); // {value: '2', done: false}
console.log(generator.next('333')); // {value: undefined, done: false}
</script> -->
<!-- <script>
function* fn() {
let num1 = yield "1"
console.log("num1:", num1);
let num2 = yield "2"
console.log("num2:", num2);
}
let generator = fn();
// 第1次调用next方法,传递的参数,生成器函数是不能接收的
// 第2次调用next方法,传递的参数,传递给了第1个yeild前面的变量
// 第3次调用next方法,传递的参数,传递给了第2个yeild前面的变量
console.log(generator.next('666')); // {value: '1', done: false}
console.log(generator.next('888')); // {value: '2', done: false}
console.log(generator.next('333')); // {value: undefined, done: false}
</script> -->
<!-- <script>
function* foo(name1) {
console.log("内部代码:111", name1);
console.log("内部代码:222", name1);
let name2 = yield "aaa"
console.log("内部代码:333", name2);
console.log("内部代码:444", name2);
let name3 = yield "bbb"
console.log("内部代码:555", name3);
console.log("内部代码:666", name3);
yield "ccc"
}
let generator = foo("malu")
console.log(generator.next('666'));
console.log(generator.next('888'));
console.log(generator.next('333'));
</script> -->
<!-- <script>
// 使用生成器 替代 之前讲的 迭代器
let names = ["码路","漫漫","前端"];
// 生成器函数
function* createArrayGenerator(arr){
for(let i=0; i<arr.length; i++){
yield arr[i]
}
// yield arr[0]
// yield arr[1]
// yield arr[2]
}
// namesGen生成器对象
let namesGen = createArrayGenerator(names)
console.log(namesGen.next());
console.log(namesGen.next());
console.log(namesGen.next());
console.log(namesGen.next());
</script> -->
<!-- <script>
// 使用生成器 生成某个范围的值
// 生成器函数
function* createRangeGenerator(start, end) {
for (let i = start; i <= end; i++) {
yield i
}
}
let rangeGen = createRangeGenerator(2, 5)
console.log(rangeGen.next());
console.log(rangeGen.next());
console.log(rangeGen.next());
console.log(rangeGen.next());
console.log(rangeGen.next());
console.log(rangeGen.next());
</script> -->
<script>
let names = ["码路", "漫漫", "前端"];
// 生成器函数
function* createArrayGenerator(arr) {
// yield语法糖
yield* arr
// for (let i = 0; i < arr.length; i++) {
// yield arr[i]
// }
// yield arr[0]
// yield arr[1]
// yield arr[2]
}
// namesGen生成器对象
let namesGen = createArrayGenerator(names)
console.log(namesGen.next());
console.log(namesGen.next());
console.log(namesGen.next());
console.log(namesGen.next());
</script>
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化