I am using node 4.1.1. When I run this code
"use strict"; function *generator() { let numbers = [1,2,3,4,5]; numbers.map(n => yield (n + 1)); } for (var n of generator()) { console.log(n); }
I get this error
numbers.map(n => yield (n + 1)); ^^^^^ SyntaxError: Unexpected strict mode reserved word
If I rearrange the code to be this
"use strict"; function *generator() { let numbers = [1,2,3,4,5]; let higherNumbers = numbers.map(n => n + 1); for(let i=0;i<higherNumbers.length;i++) { yield higherNumbers[i]; } } for (var n of generator()) { console.log(n); }
I get the expected result.
Why does the second one work, and the first fail? And surely if a keyword is reserved, it's reserved in all contexts, not just when it's used in a arrow function?
It is because arrow functions are not generator functions. For example,
function temp() { yield 1; }
Can we expect this to work? No. Because temp
is not a generator function. The same is applicable to arrow functions as well.
FWIW, the usage of yield
in an Arrow function is an early error as per the ECMAScript 2015 specification, as per this section,
ArrowFunction : ArrowParameters => ConciseBody
It is a Syntax Error if ArrowParameters Contains YieldExpression is true.
It is a Syntax Error if ConciseBody Contains YieldExpression is true.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With