You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何无法将迭代器方法赋值给变量后调用执行?

为什么直接赋值数组的Symbol.iterator方法后调用会报错?

当你执行test = [1][Symbol.iterator]时,只是把数组原型上的Symbol.iterator函数本身赋值给了变量test,并没有绑定它原本的上下文(也就是数组[1])。

核心原因:函数调用时的this绑定问题

  • 在可行代码里,[1][Symbol.iterator]()是直接在数组对象上调用方法,此时函数内部的this会自动绑定到数组[1],方法可以正常访问数组的内部数据,生成对应的迭代器。
  • 在不可行代码里,test()是作为普通函数调用,此时this的默认绑定规则会让它指向undefined(在严格模式或现代浏览器的模块环境中),而Symbol.iterator方法内部需要依赖this指向一个可迭代对象(这里是数组)才能工作,当this为undefined时,方法尝试对其进行对象操作,就会抛出Cannot convert undefined or null to object的错误。

修复方法

如果你想把这个方法赋值给变量后正常调用,可以用bind()方法手动绑定this到原数组:

test = [1][Symbol.iterator].bind([1]);
test().next(); // 返回 { value: 1, done: false }

内容的提问来源于stack exchange,提问作者user463535

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 14:01:26