JavaScript中yield实用简洁实现方式

yizhihongxing

下面我将为您详细讲解JavaScript中yield实用简洁实现方式的完整攻略。

什么是yield?

在ES6中,yield是一个全新的关键字。yield出现在* 函数中,可以使函数暂停执行,yield关键字可以将控制权交给函数外部的调用者。

yield有助于实现可中断的长时间运行的函数,并逐步提供它们的值。

yield的用法

yield语句放置了一个值,并暂停执行一个生成器函数。该值可以由函数的外部调用者接收到。

以下是yield语句的基本用法:

function* generator() {
  console.log('First');
  yield 1;
  console.log('Second');
  yield 2;
  console.log('Last');
  yield 3;
  console.log('End');
}

const iterator = generator();
console.log(iterator.next()); // First { value: 1, done: false }
console.log(iterator.next()); // Second { value: 2, done: false }
console.log(iterator.next()); // Last { value: 3, done: false }
console.log(iterator.next()); // End { value: undefined, done: true }

在示例代码中,生成器函数generator定义了yield语句三次。每当iterator.next()在生成器函数中遇到一个yield语句时,暂停函数的执行并返回一个值。在这个例子中,iterator.next()的第一次调用返回{ value: 1, done: false }

需要注意的是,当Iterator完成迭代时,它的value属性为undefineddone属性为true

yield实用简洁实现方式

通常使用yield需要在一个生成器函数内部使用,但也可以使用yield*表达式将yield作为一个委托器(生成函数)使用,相当于生成器可以将控制权转移给另一个生成器。

以下是使用yield*的实现方式:

function* generateNumbers(min, max) {
  for (let i = min; i <= max; i++) {
    yield i;
  }
}

function* generateEvenNumbers(min, max) {
  for (let i of generateNumbers(min, max)) {
    if (i % 2 === 0) {
      yield i;
    }
  }
}

const iterator = generateEvenNumbers(1, 10);
console.log(iterator.next().value); // 2
console.log(iterator.next().value); // 4
console.log(iterator.next().value); // 6
console.log(iterator.next().value); // 8
console.log(iterator.next().value); // 10

在代码中,generateNumbersgenerateEvenNumbers都是生成器函数。generateEvenNumbers内部使用了yield*表达式,把控制权交给另一个生成器函数generateNumbers。示例代码输出了1到10之间的偶数。

最后,这就是JavaScript中yield实用简洁实现方式的完整攻略,希望能够对您有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript中yield实用简洁实现方式 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • jQuery UI Datepicker月名短选项

    jQuery UI的日期选择器小部件提供了许多选项,可以自定义日期选择器的外观和行为。其中,monthNamesShort选项用于指定日期选择器中月份的短名称。本文将详细介绍monthNamesShort选项的语法和用法,并提供两个示例说明。 语法 以下是monthNamesShort选项的基本语法: $(selector).datepicker({ mon…

    jquery 2023年5月9日
    00
  • jQuery中DOM 属性使用实例详解上篇

    首先,在讲解jQuery中DOM属性使用之前,我们需要了解一下DOM属性的概念。DOM属性是指Document Object Model(文档对象模型)的属性,它们用于访问HTML元素的属性,比如元素的文本内容和样式等。在jQuery中,通过使用prop()和attr()方法可以轻松地查询和修改HTML元素的DOM属性。 本篇攻略中,我们将详细讲解jQuer…

    jquery 2023年5月28日
    00
  • jQuery contains()方法

    jQuery contains()方法用于查找包含指定文本的元素。以下是关于jQuery contains()方法的详细攻略,含两个示例,演示如何使用jQuery contains()方法: 语法 jQuery contains()方法的语法如下: $(selector:contains(text)) 参数说明: selector:必需,用于指定要搜索的元素…

    jquery 2023年5月9日
    00
  • jQuery UI滑块动画选项

    以下是关于 jQuery UI 滑块动画选项的详细攻略: jQuery UI 滑块动画选项 jQuery UI 提供了一个名为 animate 的选项,用于设置滑块的动画效果。该选项可以使滑块在滑动时具有动画效果可以设置动画的持续时间、缓动函数等。 语法 $( ".selector" ).slider({ animate: { durat…

    jquery 2023年5月11日
    00
  • jQWidgets jqxListBox getCheckedItems()方法

    jQWidgets jqxListBox getCheckedItems()方法详解 jQWidgets是一个基于jQuery的UI组件库,提供了富UI组件工具包。jqxListBox是其中之一。本文将详细介绍jqxListBox的getCheckedItems()方法包括定义、语法和示例。 getCheckedItems()方法的定义 jqxListBox…

    jquery 2023年5月10日
    00
  • jQWidgets jqxTreeGrid expandRow()方法

    jQWidgets jqxTreeGrid expandRow()方法 jqxTreeGrid 是 jQWidgets 提供的一个树形表格组件,它可以展示层级结构的数据支持多种交互操作。jqxTreeGrid 提供了 expandRow() 方法,用于展开指定行。 expandRow()方法 expandRow() 方法用于展开指定行。它接受一个参数 row…

    jquery 2023年5月11日
    00
  • jQWidgets jqxComboBox addItem()方法

    jQWidgets 的 jqxComboBox 组件提供了 addItem() 方法,用于向下拉列表中添加新项。本文将详细介绍 addItem() 方法的使用方法,包括概述、示例以及注意事项。 addItem() 方法概述 addItem() 方法用于向 jqxComboBox 组件的下拉列表中添加新项。该方法接受一个对象作为参数,该对象包含要添加的项的属性…

    jquery 2023年5月11日
    00
  • 当元素被点击时,通过添加类名来切换类,当点击外部时,删除类

    要实现当元素被点击时通过添加类名来切换类,当点击外部时删除类,可以使用以下步骤: 第一步:添加点击事件 使用 addEventListener 方法添加元素的点击事件,当元素被点击时触发对应的事件处理函数。 const element = document.querySelector(‘.element’); element.addEventListener…

    jquery 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部