在方法

时间:2016-10-12 19:54:16

标签: javascript oop parameter-passing anonymous-function

我目前正在FreeCodeCamp中进行JavaScript练习,我的代码应该使用的一个测试用例是一个函数调用,如下所示:

addTogether(2)(3);

这是我给出的简单功能:

function addTogether() {
  return;
}

当我运行以下代码时:

function addTogether() {
  return arguments;
}

在编辑器提供的控制台中,我得到:

  

TypeError:addTogether(...)不是函数

指令暗示使用arguments对象,它适用于只有一个参数对象(即addTogether(2, 3);)的测试用例函数调用,但不适用于我已经显示的那个以上。

当我们使用上面显示的格式时,有没有办法访问/使用单独的参数对象?

注意:我不想要任何答案来解决问题,只需要获取有关访问这些函数调用参数的任何技术的信息。

帮助,非常感谢。

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;   
  }   
}