gpt4 book ai didi

javascript - node.removeChild 和 (c)=>node.removeChild(c) 有什么区别?

转载 作者:行者123 更新时间:2023-12-03 02:32:19 25 4
gpt4 key购买 nike

我编写了这个简单的代码来删除 h2 元素内的所有文本:

const h2 = document.querySelector('h2');
const children = Array.from(h2.childNodes)
.filter((childNode)=>childNode.nodeName === '#text');
children.forEach(h2.removeChild); // Throws TypeError: Illegal invocation

但是,最后一行抛出了一个错误 - TypeError: Illegal incalling。当我用以下内容替换最后一行时,此问题得到解决:

children.forEach((child)=>h2.removeChild(child)); // Just works

我的问题是,为什么 javascript 首先会抛出错误,为什么箭头函数会修复它? h2.removeChild 是一个带有 1 个参数的函数,因此 ( h2.removeChild ) 的行为不应该与 ( (child)=>h2.removeChild(child) ) 相同吗?

最佳答案

因为您在这里丢失了 .removeChild 函数的正确上下文。
您也可以这样做:

children.forEach(h2.removeChild.bind(h2));

关于javascript - node.removeChild 和 (c)=>node.removeChild(c) 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48682940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com