This question already has an answer here:
TypeError: Illegal Invocation on console.log.apply
                            
                                (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