I am curious about the significance of the * (star/asterisk) syntax that comes after a yield in a recursive generator function

Imagine I have coded an ES6 generator

function *createFibonacciIterator(a = 0, b = 1) {
  yield b;
  yield *generateNextFibonacci(b, b + a); // <== INQUIRING ABOUT THIS LINE
}

Now, I utilize this generator to obtain the initial 20 results

let fibber = createFibonacciIterator();
for (let ii = 0; ii < 20; ii++) {
    console.log(fibber.next());
}

If I exclude the * from the

yield *generateNextFibonacci(b, b + a);
line, it leads to issues, as I intend to yield a value rather than an iterator.

What does the * symbol signify in the context of generators?

Answer №1

Typically in many scenarios

yield *somethingDifferent;

achieves similar functionality to

for (const item of somethingDifferent) {
  yield item;
}

Answer №2

When the symbol * appears in a function declaration, it signifies that the function is a generator function.

However, when it is used as part of yield *myGeneratorFunction(), according to the specifications outlined in Section 14.4.14 of the Ecmascript 262 specification, the engine attempts to resolve the generator function by calling the next() method on the iterator returned by the generator function.

If the yield keyword is used without the * (e.g. yield createFibonacci()), it returns the value of the expression following the yield statement. In this example, it would be the value generated by the createFibonacci function.

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Hide a header and bring it back after a 2-second delay

I REPLIED BELOW Is there a way to make the header of my webpage fade out when scrolled and then be hidden using style.display? Here's what I have so far: <script type="text/javascript> function Scroll() { var head = document.getEl ...

Maintaining AngularJS Authentication Securengular: Ensuring

I need to find the ideal architectural solution. Below is the HTML code I currently have: <body ng-controller="individualFootprintController as $ctrl"> <div ng-hide="$ctrl.authenticated"> <h1>Login</h1> Wit ...

Utilizing jQuery to Bind AJAX Events without a DOM Element

The documentation for jQuery AJAX Events provides examples that all involve using a jQuery DOM Element to declare a binding, like so: $('.log').ajaxSend( hander ); I am interested in capturing jQuery AJAX Events without the need for a DOM Eleme ...

Leveraging keypress() for managing all Vue interactions

I am in the process of converting a game from Javascript/jQuery to Vue. This particular game is entirely controlled by keyboard input, with no mouse interaction involved. Players navigate through the game using the "up" and "down" arrow keys to cycle thro ...

When hovering over an image, another image is revealed

<div> <a href="#"><img src="images/Informasjon_button.png" width="120px" height="120px" /></a> </div> <div> <a href="#"><img src="images/Mail_button.png" width="120px" height="120px" /></a> </div ...

What is the significance of using $timeout in order to activate a watch function?

There is an interesting phenomenon happening with my directive. It watches the height of an element that is being updated by a controller using a factory method to retrieve data. Strangely, unless I include a $timeout in that factory function, my watch doe ...

Tips for integrating error management in Angular with RXJS

Implementing error handling in the use case method by using subscriptions is my goal. When an error occurs in the adapter, the handling should be done in the use case. However, in the code snippet provided below, the catch block does not seem to work pro ...

The React array map function seems to be creating a duplicate of the array within an array of objects

When creating a movie application, the challenge arises when showtimes are embedded in an array of objects inside an array of movie objects. The issue is that the times are duplicating, causing the movie to render multiple times based on the number of show ...

The result of jQuery is an Object Object in a dynamic and user-friendly web application

Working on an application that requires the use of JQuery has brought up an issue with my functions related to sons and grandsons in the code below: When typing http://localhost:8080/fathers into my browser, I receive the following response: [{"id":1," ...

Looking to install nodemon for Node.js on macOS? If you're encountering a "command not found" error, here's

After installing nodemon using the command npm install -g nodemon, I encountered a Permissions issue. To resolve this, I used the sudo npm install -g nodemon command. However, when attempting to run the "nodeman" command, I kept receiving an error that s ...

Incorporating onPause and onResume functionalities into a YouTube video featured on a page built with Ionic 2

I'm encountering a minor problem with a simple demo Android app built in Ionic 2. Whenever a Youtube video is playing on the Homepage, if the power button is pressed or the phone goes into sleep/lock mode, the Youtube video continues to play. This is ...

ways to undo modifications made to a value within an input field using jquery or javascript

$(document).ready(function () { //Highlight row when selected. $(function () { $('#Cases tr').click(function () { $('#Cases tr').removeClass('selectedRow'); $(this).addClass(&apos ...

Difficulty in displaying accurate visuals for Albers US Choropleth Map using d3.js and React

I'm currently troubleshooting my code as I'm only seeing a large square of one color when I attempt to create a colorScale for each element with the class "county" on this Albers US map. The desired outcome is something similar to this project: ...

Chrome experiencing problems with placeholder text fallback event

My text field has a placeholder text that says "First Name". When the user clicks on the field, the text disappears and allows them to type in their own text. HTML <input class="fname" type="text" placeholder="First Name"/> JS function handlePlac ...

What is the simplest way to display an HTTP response in an alert window?

Struggling to display the JSON response using JavaScript's window.alert or alert. As a non-native JS coder, I apologize for my lack of experience. Here are a few attempts I've made based on online examples. My objective is to showcase the JSON r ...

Is the jQuery ajax connection established, but the response is empty?

I am currently experimenting with creating a test that involves ajax response utilizing an external array as a configuration file. However, I am encountering an issue where I consistently receive a blank response. Can someone help identify the reason behin ...

Utilizing Angular's ngShow and ngHide directives to hide spinner when no data is retrieved

I'm having an issue with the HTML code below. It currently displays a spinner until a list of tags is loaded for an application. However, the spinner continues even if no events exist. I want to make the spinner disappear and show either a blank inpu ...

What steps do I need to follow in order to set up webpack.config.js to convert my HTML file to JS in a Reactjs application

My current folder structure is shown below: https://i.sstatic.net/mSdcH.png Upon attempting to run my React app, I encountered the following error: Failed to compile. ./src/css/owl.html 1:0 Module parse failed: Unexpected token (1:0) To resolve this is ...

What is the best way to integrate a new unique identifier into an existing MongoDB document using NodeJS?

I am looking to add up a field in a document when I input a new entry that has a replicated unique id. This is the code I have so far: MongoClient.connect(process.env.MONGODB_URI || process.env.DB_CONNECTION, { useUnifiedTopology: true, useNewUrlParser ...

What is the correct timing for implementing a JavaScript delay to activate CSS styling?

Let's say I have some CSS like #joe { transition: opacity 500ms; opacity: 0; } Next, I include JavaScript that triggers the addition of a div and then animates the opacity to = 1 when you click the page. document.body.onclick = function () { var j ...