На этой странице я нашел новый тип функции JavaScript:
// NOTE: "function*" is not supported yet in Firefox.
// Remove the asterisk in order for this code to work in Firefox 13
function* fibonacci() { // !!! this is the interesting line !!!
let [prev, curr] = [0, 1];
for (;;) {
[prev, curr] = [curr, prev + curr];
yield curr;
}
}
Я уже знаю , что yield
, let
и [?,?]=[?,?]
делать , но не имею ни малейшего представления о том , что function*
это должно быть. Что это?
PS не пытайтесь попробовать Google, невозможно найти выражения со звездочками ( они используются в качестве заполнителей ).
javascript
function
ecmascript-6
Строка QNA
источник
источник
function*
синтаксис поддерживается в Firefox начиная с версии 26: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… *. Старые версии использовали другой синтаксис.*
был удален из ссылки от @Nickolay. Вот ссылка непосредственноfunction*
на MDN . Конечно же, «базовая» поддержка начиная с v26 .Ответы:
Это функция генератора .
Историческая справка:
Это предложенный синтаксис для
EcmaScript.next
.Дейв Герман из Mozilla выступил с докладом о EcmaScript.next . В 30:15 он говорит о генераторах.
Ранее он объяснял, как Mozilla экспериментально внедряет предложенные изменения языка для управления комитетом. Дейв тесно сотрудничает с Бренданом Эйчем, техническим директором Mozilla (я думаю) и оригинальным дизайнером JavaScript.
Вы можете найти более подробную информацию в вики рабочей группы EcmaScript: http://wiki.ecmascript.org/doku.php?id=harmony:generators
Рабочая группа (TC-39) имеет общее согласие с тем, что EcmaScript.next должен иметь какое-то предложение генератора итератора, но это не является окончательным.
Вы не должны полагаться на это отображение без изменений в следующей версии языка, и даже если оно не изменится, оно, вероятно, не будет отображаться в других браузерах некоторое время.
источник
for(;;)
)? Зачем использовать это в этом контексте?for(;;)
же, какwhile (true)
. Он используется в этом контексте, поскольку последовательность Фибоначчи является неограниченной последовательностью.Это функция генератора - и так сказано на странице, которую вы цитируете, в комментарии, которую вы заменили на «это интересная строка» ...
По сути, это способ задавать последовательности программным образом, чтобы их можно было передавать и доступ к элементам по индексу без необходимости предварительно вычислять всю последовательность (возможно, бесконечной по размеру).
источник
В
function*
выглядит типа как он действует в качестве функции генератора для процессов , которые могут быть итерировать. C # имеет такую функцию, используя «return return», см. 1 и см. 2По сути, это возвращает каждое значение одно за другим к любой итерации этой функции, поэтому их сценарий использования показывает это в цикле стиля foreach.
источник