JavaScript中获取生成器返回数组最后一个元素的惯用写法是什么
最优实现方案
方案1:ES2022+ 环境(最简洁)
直接用数组at()方法支持负索引的特性,仅调用一次生成器,代码只有一行:
function* getArray() { yield* [1, 2, 3]; } let foo = [...getArray()].at(-1); console.log(foo); // 3
方案2:兼容旧环境
用立即执行函数(IIFE)包裹逻辑,同样仅调用一次生成器,没有额外全局变量污染:
let foo = (arr => arr[arr.length - 1])([...getArray()]); console.log(foo); // 3
方案3:大数量场景内存优化
如果生成器返回的元素量极大,不需要把所有元素都展开到数组里占内存,可以直接迭代生成器取最后一个值:
let foo, g = getArray(); for (foo of g); console.log(foo); // 3
原有写法问题说明
- 第一种逗号表达式写法报错的原因:用
let声明变量时,变量在完成初始化前处于暂时性死区,赋值表达式右侧访问foo会直接抛出引用错误,换成var虽然能运行但不符合现代JS编码规范,不推荐。 - 第二种写法除了两倍性能开销外,如果生成器内部有副作用(比如修改外部变量、请求外部资源),两次调用的返回结果可能不一致,完全不建议使用。
内容的提问来源于stack exchange,提问作者Hao Wu
相关产品推荐
相关产品推荐

