Intermediate Algorithm Scripting - Arguments Optional

Tell us what’s happening:
Describe your issue in detail here:
When I console.log(arguments), I get two object:
1.{ ‘0’: 5 }
2.{ ‘0’: 7, ‘1’: 7 }
I do not know why the arguments[0] has changed from 5 to 7 in addTogether() function. Can you explain that to me? And how to solve this problem? Thank you so much.

   **Your code so far**
function addTogether() {
 console.log(arguments)
if(arguments.length === 1){
return function addNumTwo(num2){
  return  addTogether(arguments[0], num2)
} 
} else {
  console.log(arguments[0])
  console.log(arguments[1])
  return arguments[0] + arguments[1]
  
}
}

console.log(addTogether(5)(7));
   **Your browser information:**

User Agent is: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36

Challenge: Intermediate Algorithm Scripting - Arguments Optional

Link to the challenge:

When in doubt, write clearer log statements.

function addTogether() {
 console.log('main function', arguments)
  if(arguments.length === 1){
    console.log('if branch')
    return function addNumTwo(num2){
      console.log('curried function', arguments)
      return  addTogether(arguments[0], num2)
    } 
  } else {
    console.log('else branch')
    console.log(arguments[0])
    console.log(arguments[1])
    return arguments[0] + arguments[1]
  }
}

console.log(addTogether(5)(7));

Inside that curried function, what are the arguments?

2 Likes
return function addNumTwo(num2){
  return  addTogether(arguments[0], num2)
} 

At this point where you return the addNumTwo, your arguments object no longer points to the outermost addTogether function but instead points to the arguments of the addNumTwo function.

function addTogether() {
const addTogetherArgs = arguments
if(arguments.length === 1){
return function addNumTwo(num2){
  return  addTogether(addTogetherArgs[0], num2)
}

You could store the first argument objects first and then access it inside of the addNumTwo function. This way your original arguments object is preserved.

1 Like