Почему yield классифицируется как оператор, а не как оператор? - PullRequest
5 голосов
/ 25 апреля 2020

Я смотрел на mdn javascript ссылку и заметил, что yield указан в разделе операторов. С другой стороны, return указан как утверждение. Я также обнаружил, что yield имеет приоритет оператора , равный 2.

Какие особенности yield позволяют ему попадать в класс операторов, а не в оператор? Почему return попадает в операторы, а не в операторы?

Ответы [ 2 ]

3 голосов
/ 25 апреля 2020

Это оператор, потому что его можно использовать в выражении.

function* g() {
    value = 3;
    while (value !== 5) value = Math.floor(yield value + 1);
}

var gen = g();

console.log(gen.next().value);
console.log(gen.next(1.5).value);
1 голос
/ 25 апреля 2020

Я не уверен в этом, но в контексте генератора yield отправляет данные в generator.next() таким образом, что он работает во многом как функция. Операторы - это специальные классы функций в большинстве языков (JavaScript inlcuded).

Вы могли бы почти представить generator.next, вызывающего его экземпляр, передавая обратный вызов относительно того, где возобновить. И yield, вызывая этот обратный вызов

Return, сигнализирует об окончании пути выполнения и замене возвращаемого значения в правильную ячейку памяти и раскручивает стек вызовов на 1 единицу. Если чувствует себя исконно в определении языка,

...