我目前正在FreeCodeCamp中进行JavaScript练习,我的代码应该使用的一个测试用例是一个函数调用,如下所示:
addTogether(2)(3);
这是我给出的简单功能:
function addTogether() {
return;
}
当我运行以下代码时:
function addTogether() {
return arguments;
}
在编辑器提供的控制台中,我得到:
TypeError:addTogether(...)不是函数
指令暗示使用arguments
对象,它适用于只有一个参数对象(即addTogether(2, 3);
)的测试用例函数调用,但不适用于我已经显示的那个以上。
当我们使用上面显示的格式时,有没有办法访问/使用单独的参数对象?
注意:我不想要任何答案来解决问题,只需要获取有关访问这些函数调用参数的任何技术的信息。
帮助,非常感谢。
答案 0 :(得分:4)
不要将它视为两组独立的论点。想一想你正在调用另一个函数(你是)。函数是JavaScript中的第一类值,因此您可以像使用任何其他值一样使用它们。这包括从函数中返回它们。
var f = function(y) {
console.log('f:', y);
};
var getF = function(x) {
console.log('getF:', x);
return f;
};
getF(1)(2);
函数还可以使用任何父作用域中存在的值。简而言之,执行此操作的函数称为closures.
function createGetX(x) {
return function() {
// Since x is in the parent scope, we can use it here
return x;
}
}
var one = createGetX(1);
console.log(one()); // Always
console.log(one()); // returns
console.log(one()); // one
答案 1 :(得分:1)
有时它会帮助我以某种顺序思考。您可以阅读代码" addTogether(2)"并在阅读"(3)"之前停止。
从那里你可以看到练习要你有第一部分" addTogether(2)"返回一个函数...因为任何时候都有"()"这意味着一个函数被调用。
所以" addTogether(2)"需要返回一个带有一个参数的函数。之后,3将是输入的一个例子。
我认为名称" addTogether"有点令人困惑......因为函数的工作就是弥补并返回添加的实际函数。
很难解释这一点而不需要太多帮助,但是你在这里的大部分工作是返回一个自定义函数,其中包括第一个变量(来自它的范围)并期望另一个变量#&# 39; s叫。
答案 2 :(得分:0)
你可以用闭包来做到这一点。
function addTogether(x) {
return function(y) {
return x+y;
}
}