【发布时间】:2021-02-04 05:01:07
【问题描述】:
这是我对 Freecodecamp 中 Arguments Optional Challenge 的问题的跟进(见下文 0:
我现在已经满足了 5/6 的挑战条件,除了输入为 addTogether(2,([3])) 时,它返回 '23' 作为字符串而不是正确的 'undefined'。
如果 [3] 是一个数组,而一个数组是一个对象,我的 checkNum 函数不应该将其标记为未定义吗?字符串是在哪里生成的?
我现在的代码:
function addTogether() {
function checkNum(x) {
return typeof x === 'number' ? x : undefined;
}
let num1 = checkNum(arguments[0]);
let num2 = checkNum(arguments[1]);
if (arguments.length === 1) {
if (typeof num1 === 'number') {
let a = num1;
return function (b) {
return a + b;
};
}
return undefined;
}
if (arguments.length > 1) {
if (typeof num1 !== 'number' || typeof num2 !== 'number') {
return undefined;
}
if (typeof num1 === 'number' && typeof num2 === 'number');
{
return arguments[0] + arguments[1];
}
}
}
谢谢
//下面的原始问题:
我卡在 freecodecamp 问题上 Arguments Optional。 https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/intermediate-algorithm-scripting/arguments-optional 在研究这个问题时,多次引用了以下代码块,但我就是不明白它的含义:
if(arguments.length==1){
if (typeof a == "number"){
return function(b){
if (typeof b == "number"){
return a + b;
}
};
}
}
我理解到'return function(b)'部分,然后我的大脑融化了。
如果有人可以向 6 岁的孩子解释一下,这个菜鸟将非常感谢您的帮助。
【问题讨论】:
-
当封闭函数返回
function(b)事物时,它返回的代码气泡记住它可以访问的变量,其中恰好包括a。所以这个气泡会随身携带a,直到它调用函数本身。发生这种情况时,b被传递到函数中。该函数只是从其内存中调用a并将其添加到b。整个想法都包含在一个闭包中(双关语)。如果你正在学习“中级 JavaScript”——你应该学习一下。 Reference. -
如果该代码让您大吃一惊,请查看此 Gist 中与您发布的代码完全相同的现代代码:gist.github.com/randycasburn/…
-
哇,我只能理解现代代码中发生的事情的 20%。我还有很长的路要走……
标签: javascript function arguments