参数 可选 - 为什么我得到参数 (2)([3]) 的字符串?
Arguments Optional - why do I get a string for arguments (2)([3])?
这是对我在 Freecodecamp 中关于参数可选挑战的问题的跟进(见下文 0:
我现在已经满足了挑战的 5/6 条件,除了当输入是 addTogether(2,([3])) 时,returns '23' 作为字符串而不是正确的'undefined'.
如果 [3] 是一个数组,而数组是 object,我的 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 可选。
https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/intermediate-algorithm-scripting/arguments-optional
在研究这个问题时,已经多次提到以下 code-block,但我无法理解它的含义:
if(arguments.length==1){
if (typeof a == "number"){
return function(b){
if (typeof b == "number"){
return a + b;
}
};
}
}
我理解到'return function(b)'部分,然后我的大脑就融化了。
如果有人可以向 6-year-old 解释一下,这个新手将非常感谢您的帮助。
我们可以用两种方式声明函数,常规方式:
function test(){
}
或者有趣的方式
let test = function(){
}
在这种情况下,函数是 returning 一个函数
看这里:
function returnfunction(){
return function(b){
if (typeof b == "number"){
return a + b;
}
}
}
let x = returnfunction()
所以,x是returnfunction
的return值,也就是
function(b){
if (typeof b == "number"){
return a + b;
}
}
和上面很相似,
x = function(){
//...
}
这是 return 函数而不是值的常见做法。
当使用一个参数调用外部函数(应该做加法)时,它不是做加法(不能做),而是 returning 一个函数。当随后使用数字参数调用该函数时,它会执行函数 b
并求和。
假设外部函数名称是add()
,那么它可以通过以下方式触发:
add(10, 15); // 25
var f = add(20);
f(18) // 38
add(4)(6) // 10
完整示例:
function add(a, b) {
if (arguments.length == 1) {
if (typeof a == "number") {
return function (b) {
if (typeof b == "number") {
return a + b;
}
};
} else {
return "undefined";
}
} else if (arguments.length == 2) {
if (typeof a == "number" && typeof b == "number") {
return a + b;
} else {
return "undefined";
}
} else {
return "undefined";
}
}
console.log(add(10, 15));
var f = add(20);
console.log(f(18));
console.log(add("xyz"));
console.log(add(10, "5"));
console.log(add(4)(6));
这是对我在 Freecodecamp 中关于参数可选挑战的问题的跟进(见下文 0:
我现在已经满足了挑战的 5/6 条件,除了当输入是 addTogether(2,([3])) 时,returns '23' 作为字符串而不是正确的'undefined'.
如果 [3] 是一个数组,而数组是 object,我的 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 可选。 https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/intermediate-algorithm-scripting/arguments-optional 在研究这个问题时,已经多次提到以下 code-block,但我无法理解它的含义:
if(arguments.length==1){
if (typeof a == "number"){
return function(b){
if (typeof b == "number"){
return a + b;
}
};
}
}
我理解到'return function(b)'部分,然后我的大脑就融化了。
如果有人可以向 6-year-old 解释一下,这个新手将非常感谢您的帮助。
我们可以用两种方式声明函数,常规方式:
function test(){
}
或者有趣的方式
let test = function(){
}
在这种情况下,函数是 returning 一个函数 看这里:
function returnfunction(){
return function(b){
if (typeof b == "number"){
return a + b;
}
}
}
let x = returnfunction()
所以,x是returnfunction
的return值,也就是
function(b){
if (typeof b == "number"){
return a + b;
}
}
和上面很相似,
x = function(){
//...
}
这是 return 函数而不是值的常见做法。
当使用一个参数调用外部函数(应该做加法)时,它不是做加法(不能做),而是 returning 一个函数。当随后使用数字参数调用该函数时,它会执行函数 b
并求和。
假设外部函数名称是add()
,那么它可以通过以下方式触发:
add(10, 15); // 25
var f = add(20);
f(18) // 38
add(4)(6) // 10
完整示例:
function add(a, b) {
if (arguments.length == 1) {
if (typeof a == "number") {
return function (b) {
if (typeof b == "number") {
return a + b;
}
};
} else {
return "undefined";
}
} else if (arguments.length == 2) {
if (typeof a == "number" && typeof b == "number") {
return a + b;
} else {
return "undefined";
}
} else {
return "undefined";
}
}
console.log(add(10, 15));
var f = add(20);
console.log(f(18));
console.log(add("xyz"));
console.log(add(10, "5"));
console.log(add(4)(6));