Показать сообщение отдельно
  #9 (permalink)  
Старый 22.03.2019, 13:34
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Код в первом посте range(0, 10) создаёт массив чисел, а затем, при суммировании, на нём (на массиве) запускается итератор массива.

В №7 range(0, 10) создаёт итератор, который запускается при суммировании.

Ещё пример, добавлю функцию
function* take(n, xs) {
	for(const x of xs) {
		if(n-- <= 0)
			break;

		yield x;
	}
}


Теперь, если использовать определения из №1, то alert(sum(take(5, range(1, Infinity)))); никогда ничего не вернёт, поскольку сначала попытается создать массив из всех натуральных чисел! (я в курсе про Number.MAX_SAFE_INTEGER)

Теперь, если использовать определения из №7, то alert(sum(take(5, range(1, Infinity)))); результат будет, поскольку оно просуммирует столько чисел, сколько указано!

Последний раз редактировалось Malleys, 22.03.2019 в 13:36.
Ответить с цитированием