2016-10-12 4 views
4

я в настоящее время работаю над упражнением JavaScript в FreeCodeCamp, и один из тестовых случаев моего код должен работать с вызовом функции, которая выглядит следующим образом:Выполнение метода внутри метода

addTogether(2)(3); 

здесь это функция скелетное Я дано:

function addTogether() { 
    return; 
} 

Когда я запускаю код ниже:

function addTogether() { 
    return arguments; 
} 

в минусах оле, что редактор обеспечивает, я получаю:

TypeError: addTogether(...) is not a function

инструкция намекает на использование arguments объекта, и он хорошо работает с тестом-случае вызова функции, что есть только один объект аргумента (т.е. addTogether(2, 3);), но не с той, которую я показал выше.

Есть ли способ доступа/использования отдельных объектов аргументов, когда они находятся в формате, который я показал выше?

Примечание: Я не хочу какой-либо ответ, чтобы решить эту проблему, просто информация о каких-либо методах, о доступе к аргументам этих типов вызовов функций.

Помощь, очень ценится.

+0

повторный вопрос [http://stackoverflow.com/questions/29431006/javascript-functioncallarg1arg2](http://stackoverflow.com/questions/29431006/javascript-functioncallarg1arg2) –

+2

«Я не хочу никакого ответа для решения проблемы, просто информация о любых методах доступа к аргументам этих типов вызовов функций «Просто скажите, я ценю отношение. Слишком много людей просто хотят быстрого решения своей проблемы, не понимая решения. Престижность. –

ответ

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

0

Вы можете сделать это с помощью колпачков.

function addTogether(x) {  
 
    return function(y) { 
 
    return x+y; 
 
    } 
 
}

1

Иногда это помогает мне думать в определенном порядке. Вы можете прочитать код «addTogether (2)» и остановиться перед чтением «(3)».

Оттуда вы можете увидеть упражнение, которое хочет, чтобы у вас была эта первая часть «addTogether (2)», возвратить функцию ... так как в любое время есть «()», что означает, что функция вызывается.

Так что «addTogether (2)» необходимо вернуть функцию, которая принимает один аргумент. Позже 3 будет одним из примеров ввода.

Я думаю, что имя «addTogether» немного сбивает с толку. Поскольку задача этой функции состоит в том, чтобы составить и вернуть фактическую добавленную функцию.

Относительно трудно объяснить это, не помогая слишком много, но основная часть вашей работы здесь состоит в том, чтобы вернуть пользовательскую функцию, которая включает в себя первую переменную (из ее области) и ожидает другую переменную при ее вызове.