这是来自Crockford的JavaScript: The Good Parts书中的代码。
我理解代码的意思,除了
var results = [];
var walkDOM = function (node,func) {
func(node); //What does this do?
node = node.firstChild;
while(node) {
walkDOM(node,func);
node = node.nextSibling;
}
};
我理解代码的意思,除了
func(node)
。我猜测这里是为了将node
作为参数传递给func
函数,但是浏览器如何理解呢?node
和func
可能是任何东西,所以当函数被调用时,它可能会像这样读取:walkDOM(document.body,function(att) {
node.getAttribute(att);
results.push(node);
});
当传入func
时,walkDOM
将处理函数(att) {...}(document.body)
--这并没有任何意义。那么为什么Crockford选择包括func(node)
呢?
walkDOM
的开发人员将向其传递一个函数,该函数期望接收作为参数的 DOM。您的函数期望接收属性名称,因此不适合。 - user113716func(node)
的符号表示法。开发者是否应该将其替换为function(node)
?如果不是,那么浏览器如何理解func(node)
呢? - dopatramanwalkDOM
的函数的开发人员需要理解它。如果我想遍历DOM,针对每个文本节点,并将其文本替换为“patrick dw is sooooo good looking”,那么我会将该逻辑放在我传递的函数中。walkDOM
将把每个节点(一个接一个地)传递给您的函数,而您的函数负责对该节点执行某些操作。 - user113716func
只是对你传递给walkDOM
的同一个函数的引用。 因此,func(node)
简单地调用您的函数,并将当前节点传递给它。 - user113716