如何解决为什么这个迭代永远有效
为什么这段代码会无限运行。 我不明白发生了什么。
(function(){
console.log("Start")
function add(){
s.delete(add); //When I delete this line,everything works fine.
s.add(add);
console.count("run")
}
const s = new Set([
add
]);
s.forEach(value => {
value()
});
console.log("Finish")
})()
解决方法
这个问题的答案在 Set.prototype.forEach
的规范中:
每个值通常只访问一次。 但是,一个值将是 revisited 如果它被访问后被删除然后重新添加 在 forEach 调用完成之前。 在调用之后删除的值 调用 forEach 开始并且在被访问之前不被访问,除非 在 forEach 调用完成之前再次添加该值。新价值观 在调用 forEach 开始被访问之后添加。
因为它是一个您不断添加和运行的函数,所以它会继续这样做,删除并再次添加它。因此,您创建了一个无限循环。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。