You are currently viewing Использование объявления функции* в JavaScript

Использование объявления функции* в JavaScript

Объявление функции* используется для определения генератора, который возвращает объект генератора. Генераторы очень мощны для асинхронного программирования, поскольку они направлены на решение проблем обратного вызова.

В генераторе ключевое слово yield используется вместо return. Оператор yield приостанавливает выполнение функции и отправляет значение обратно вызывающему объекту, но сохраняет состояние, достаточное для возобновления функции из последнего состояния выполнения. Таким образом, функция продолжает выполнение сразу после последнего запуска yield. Метод next() используется для возврата объекта с двумя свойствами, done и value, и может использоваться для перехода в следующее состояние генератора.

Синтаксис:

function* function_name(param1, param2...)
{
 function body
}

Приведенные ниже примеры демонстрируют использование объявления функции*.

Пример 1:

<html>
<body>
<script>

	// Declaring a generator function
	function* generator(i) {
	yield i;
	yield i + 50;
	yield i + 100;
	}

	// Initialize the generator
	const generate = generator(50);

	// Console out the object returned
	// by the next() method
	let nextValObj = generate.next();

	// Console out the value of the object
	console.log(nextValObj.value);

	// Console out next iterations
	// of the generator
	console.log(generate.next().value);
	console.log(generate.next().value);

	// This value would be undefined as
	// the last defined one is i + 100
	console.log(generate.next().value);
</script>
</body>
</html>

Выход:

50
100
150
undefined

Пример 2:

<html>
<body>
<script>
	function* powerup(n) {
	for (let num = n; ; num *= n) {

		// Yield out the current number
		yield num;
	}
	}
	for (let power of powerup(5)) {

	// Break if the number is
	// more than 1024
	if (power > 1024)
		break;

	console.log("Yielded:", power)
	}
</script>
</body>
</html>

Выход:

Yielded: 5
Yielded: 25
Yielded: 125
Yielded: 625