Javascript 未定义()用作函数
我正在阅读一篇关于javascript调试会话的文章,作者需要一种进入removeChild of Element的方法来了解哪些代码正在运行时删除特定的元素 所以他使用了下面的代码Javascript 未定义()用作函数,javascript,undefined,Javascript,Undefined,我正在阅读一篇关于javascript调试会话的文章,作者需要一种进入removeChild of Element的方法来了解哪些代码正在运行时删除特定的元素 所以他使用了下面的代码 javascript:void(Element.prototype.removeChild=function(){undefined()}) 据我所知,“undefined是全局对象的一个属性,也就是说,它是全局范围内的一个变量。”(引用自MDN)typeof其中未定义 在下一行中,作者说他得到了堆栈跟踪(注意,
javascript:void(Element.prototype.removeChild=function(){undefined()})
据我所知,“undefined是全局对象的一个属性,也就是说,它是全局范围内的一个变量。”(引用自MDN)typeof其中未定义
在下一行中,作者说他得到了堆栈跟踪(注意,他正在与opera和dragonfly合作)
我已经尝试过执行这段代码,如果用在它上面,它就会工作,但是如果我只尝试使用
undefined()
它确实给了我一个错误“TypeError:undefined不是一个函数”,我理解这一点
任何人都可以解释一下所提到的代码是如何作为有效的javascript工作的,以及它是如何解决获取堆栈跟踪的问题的。当作者调用
undefined()
时,它会导致错误发生,他会在调试器中捕捉到错误,以便找出是谁在该元素上调用removeChild
另一种方法是使用
调试器改为code>语句,如果调试器打开,它将强制一个断点。这特别有效,因为undefined
不是一个函数,这意味着调用removeChild
函数时,它会抛出相同的错误。这就产生了非常有用的堆栈跟踪。我不确定我是否理解这个问题,但据我所知,他所做的是做了一个无效的调用,以便调试器在尝试执行它时打开,从而允许他查看调用removeChild
的位置。所以他的undefined()
和你的一样无效,这就是它的要点。它故意抛出一个异常
查找调用removeChild()的代码的快速方法是
只需使removeChild()引发异常
您还可以执行以下操作:
javascript:void(Element.prototype.removeChild=function(){debugger;})
启动调试器。是的,这样做更有意义,也更容易理解。。。。