繁体   English   中英

为什么我的闭包功能不起作用?

[英]Why wont my closure function work?

下面的函数在1个正确的括号内添加参数。 例如,它计算addTogether(2,3) = 5addTogether(2,"3") = undefined

但是,它无法计算addTogether(2)(3) = 5 ,而是给我以下错误: “ addTogether(...)不是函数” 闭包函数( return function(x) )应该考虑到addTogether(2)(3)的第二个参数,而我迷失了为什么它不起作用。

 function addTogether() { if (typeof arguments[0] !== "number" || typeof arguments[1] !== "number") { return undefined; } //not harmful but not necessary var sum = 0; var num = arguments[0]; if (arguments.length === 1) { //if only 1 argument in the original function... if (typeof arguments[0] !== "number") { return undefined; //returns undefined if arguments[0] isnt a number } return function(x) { if (typeof arguments[0] !== "number") { return undefined; //in the closure/2nd function, if first argument isnt a number then no sum will be provided } else { sum = num + x; //x = second given argument return sum; } }; } if (typeof arguments[0] === "number" && typeof arguments[1] === "number") { for (var x = 0; x < arguments.length; x++) { if (typeof arguments[x] === "number") { sum += arguments[x]; //add the argument[0] and [1] if both are number types, not string or array types or any other types } else { sum = undefined; } } return sum; } // the above "if" statement is rsponsible for achieving addTogether(2,3) = 5; } console.log(addTogether(2)(3)); 

如果您希望函数像addTogether(2)(3) ,这意味着addTogether必须带有一个参数并返回一个函数。 addTogether(2)此调用将返回一个新函数,然后使用第二个参数调用返回的函数。

在你的情况下,当你比较

if (typeof arguments[0] !== "number" || typeof arguments[1] !== "number") 

并使用一个参数调用该函数,第二个typeof arguments[1] !== "number"返回true ,因为第二个参数是undefined ,所以它不是数字,并且您的函数返回undefined

并且您还可以在代码中删除一些条件。 因为以上条件已经对它们进行了检查。

 function addTogether() { if (typeof arguments[0] !== "number") { return undefined; } var sum = 0; var num = arguments[0]; if (arguments.length === 1) { return function(x) { if (typeof arguments[0] !== "number") { return undefined; } else { sum = num + x; return sum; } }; } if (typeof arguments[0] === "number" && typeof arguments[1] === "number") { for (var x = 0; x < arguments.length; x++) { if (typeof arguments[x] === "number") { sum += arguments[x]; } else { sum = undefined; } } return sum; } } console.log(addTogether(2)(3)); 

if (typeof arguments[0] !== "number" || typeof arguments[1] !== "number")已经导致addTogether(2)返回undefined

if语句放在函数的末尾或将其||转为 &&修复它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM