Я случайно увидел, что это вызывает ошибку в V8 (Chrome, Node.js и т. Д.):
for (let val of Symbol()) { /*...*/ }
TypeError: символ не является функцией или его возвращаемое значение не может быть повторено
Похоже, что любое другое не повторяющееся значение (включая функцию) вызывает другую ошибку:
for (let val of function () { throw 'never called' }) { /*...*/ }
TypeError: (промежуточное значение) не повторяется
Как указано в справочнике, ошибка специфическая в Chrome:
TypeError: 'x' не является функцией или возвращаемое значение не может быть повторено (Chrome)
...
Значение, которое задается как правая часть for… of или как аргумент функции, такой как Promise.all или TypedArray.from, не является итерируемым объектом. Итерируемый может быть встроенным итерируемым типом, таким как Array, String или Map, результатом генератора или объектом, реализующим итеративный протокол.
Похоже, что ни одна из перечисленных вещей не должна принимать функцию вместо итерации в качестве аргумента, поэтому неясно, почему ошибка делает акцент на типе функции.
Есть ли смысл в этой ошибке? Существуют ли обстоятельства, при которых is not a function
замечание имеет смысл в своем контексте?
for (let val of (function () {})()) { }
- вы не вызываете функцию в своем примере. - person jonrsharpe   schedule 13.05.2020for (let val of Number(1)) {}
иfor (let val of Boolean(true)) {}
выдают одну и ту же ошибку.for (let val of 1) {}
иfor (let val of true) {}
нет. - person Ben Aston   schedule 13.05.2020[...Symbol()]
выдаст ту же ошибку TypeError, перейдя сюда, чтобы удалить мой ответ и продолжить обсуждение - person Robert Mennell   schedule 13.05.2020