下面的代码片段来自MDN - 重新引入Javascript,它应该演示IIFE。我有点看到它应该计算这个文本节点中的字符,但我不确定几件事情。第一个是为什么for语句在第一个参数部分var i=0, child
中有2个参数。第二个是更一般的,如何使用这个函数调用自己..有人可以向我解释整体流程吗?
var charsInBody = (function counter(elm) {
if (elm.nodeType == 3) { // TEXT_NODE
return elm.nodeValue.length;
}
var count = 0;
for (var i = 0, child; child = elm.childNodes[i]; i++) {
count += counter(child);
}
return count;
})(document.body);
第一个是为什么for语句在第一个参数部分var i = 0,child中有2个参数?
for循环只是while循环的精简版本,这意味着:
for(declarations; condition; last) {
body
}
是相同的:
declarations
while(condition) {
body
last
}
这意味着在你的情况下,它是:
var i = 0, child;
while(child = elm.childNodes[i]) {
count += counter(child);
i++
}
所以实际上child
只是在循环之前定义了一个新变量