epeleg
epeleg

Reputation: 10945

understanding lexical arguments in ES2015

I was looking at:

https://babeljs.io/learn-es2015/

And it has the following example:

// Lexical arguments
function square() {
  let example = () => {
    let numbers = [];
    for (let number of arguments) {
      numbers.push(number * number);
    }

    return numbers;
  };

  return example();
}

square(2, 4, 7.5, 8, 11.5, 21); // returns: [4, 16, 56.25, 64, 132.25, 441]

and I was trying to understand what was really happening here: specifically can someone explain why does square use an internal arrow function instead of just performing the required actions? could this not be re-written to be:

function square() {
    let numbers = [];
    for (let number of arguments) {
      numbers.push(number * number);
    }

    return numbers;
}

What does the extra wrapping in "example" change in the behavior of this function?

Upvotes: 1

Views: 130

Answers (1)

Troopers
Troopers

Reputation: 5452

It simply demonstrates that arguments in the arrow function refers to arguments of square function. this is not true with a simple function :

function square() {
  let example = function() {
    let numbers = [];
    for (let number of arguments) {
      numbers.push(number * number);
    }

    return numbers;
  };

  return example();
}

square(2, 4, 7.5, 8, 11.5, 21); // returns: []

Upvotes: 1

Related Questions