来自MDN的IIFE示例 - 重新引入Javascript页面

问题描述 投票:0回答:1

下面的代码片段来自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);
javascript dom recursion iife
1个回答
2
投票

第一个是为什么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只是在循环之前定义了一个新变量

© www.soinside.com 2019 - 2024. All rights reserved.