需要一个脚本来很快告诉我有多少HTML注释有页面,其内容是什么的。 使用匿名函数递归遍历DOM似乎是适当的:
var comments = []; //set up an array where comment contents will be copied to
(function(D) {
if (8===D.nodeType) comments.push(D.nodeValue); //check if node is a comment
D=D.firstChild;
while (D) {
arguments.callee(D); //recursively look for comments...
D=D.nextSibling; //...and remember to iterate over all children of any node
}
})(document);
console.log(comments.join("\r\n")); //list all comments
小提琴按预期工作,但我很好奇,如果它被称为遍地真的是同样的功能,或在那里的原有功能的多个引用调用,或者是所谓的有多个相同的功能。毕竟,一直没有命名参考做,所以它怎么会为穿越的不断深入工作? 我想我或许可以通过增加检查下面的代码到while (D) {...}
//tmpCallee has been declared
if (tmpCallee) {
console.warn(arguments.callee === tmpCallee);//true
/*great, means these should be both pointing to the same function*/
console.log(arguments.callee === arguments.caller);//false
/*wait, what? didn't we just establish above that
all of our functions called recursively would be the same?*/
console.log(arguments.caller);//undefined... but it was called recursively!
console.log(arguments.callee);//prints our function code verbatim as it should
}
tmpCallee = arguments.callee;
我糊涂了。 1)我真的遍地调用同一个功能还是有所谓的多个相同的功能或者是别的东西在作怪? 2)为什么arguments.caller
不是我们的功能点? 它显然受到它调用 - 这就是递归是如何工作的,不是吗?