This question already has an answer here:
TypeError: Illegal Invocation on console.log.apply
(1个答案)
2年前关闭。
我编写了以下简单代码,以删除h2元素内的所有文本:
但是,最后一行引发了一个错误-TypeError:非法调用。当我将最后一行替换为:
我的问题是,为什么javascript首先会引发错误,为什么箭头功能会解决该错误? h2.removeChild是一个带有1个参数的函数,因此(h2.removeChild)的行为不应与((child)=> h2.removeChild(child))相同吗?
(1个答案)
2年前关闭。
我编写了以下简单代码,以删除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:非法调用。当我将最后一行替换为:
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/
10-12 00:55