我的编程“技能”的基础正在震动..我不知道这种行为是否是由递归,闭包或其他东西引起的,但这是迄今为止我见过的最奇怪的事情。
我的初衷是使用递归来计算dom元素的父级。实现闭包以存储我的计数器,并且递归将为不等于div#wrapper的每个父项增加它。它有效 - 一次。对于第一个元素(只有1个父元素 - 它返回1)但是第二个元素返回undefined。为了测试我想出了这个装备:
let parents = countParents();
let pathLength = parents(3);
function countParents() {
let counter = 0;
return function nextParent(node) {
let parent = node - 1;
counter++;
if (parent === 1)
return 'WATAFAK';
else
nextParent(parent);
}
}
console.log(pathLength);
我实际上正在质疑我的眼睛(已经很晚了,现在已经编程了一段时间),但这个函数返回undefined。怎么可能?
答案 0 :(得分:1)
function countParents() {
let counter = 0;
return function nextParent(node) {
let parent = node - 1;
counter++;
if (parent === 1)
return 'WATAFAK';
else
nextParent(parent); // call nextParent(parent) and throw away result
return undefined; // invisible line in every function
}
return undefined; // invisible line in every function (never reached)
}
如果您希望将递归的结果作为结果,则必须在其前面添加return
。它是如何现在只是副作用,它几乎是死代码。
由于else
分支没有返回,所有函数在其块结束之前都有一个不可见的return undefined,
。