我正在阅读Marijn Haverbeke的Eloquent Javascript。我来自Flash / AS3编程背景,但觉得这本书对于让我快速掌握有用。下面是HTML和JS片段,它扫描DOM以查找特定节点是否具有给定字符串:
<!doctype html>
<html>
<head>
<title>My home page</title>
</head>
<body>
<h1>My home page</h1>
<p>Hello, I am Marijn and this is my home page.</p>
<p>I also wrote a book! Read it
<a href="http://eloquentjavascript.net">here</a>.</p>
</body>
</html>
function talksAbout(node, string) {
if (node.nodeType == document.ELEMENT_NODE) {
for (var i = 0; i < node.childNodes.length; i++) {
if (talksAbout(node.childNodes[i], string))
return true;
}
return false;
} else if (node.nodeType == document.TEXT_NODE) {
return node.nodeValue.indexOf(string) > -1;
}
}
console.log(talksAbout(document.body, "book"));
// → true
我当然得到函数,数组和一般语法,但是以下行是如何工作的。
if (talksAbout(node.childNodes[i], string))
return true;
一般性解释这个函数对我有用,因为它没有在书中详细说明。谢谢!
答案 0 :(得分:0)
它是一个递归函数。
这意味着它是一个自我调用的函数(深入到对象/进行进一步处理)。
每当您的talksAbout函数找到ELEMENT_NODE时,它将浏览ELEMENT_NODE,直到遇到TEXT_NODE。
当找到TEXT_NODE时,它将评估字符串是否显示为文本中给出的字符串。然后将该结果一直返回到链中。
它的作用是: