2016-01-09 4 views
1

Я пытаюсь понять синтаксис функции новой стрелки es6 и то, как она относится к тому, что я уже знаю.Понимание функций стрелок es6

Мое понимание стрелок функции имеют

  • Нет Имя
  • Никакие аргументы не приемлю
  • Нет способности быть генератором
  • лексического это

Так следующее понятие правильно до тех пор, пока вы не используете аргумент объекта, думающего, что это для стрелки, и не используя стрелку в качестве генератора r

function() {}.bind(this); // synonym for() => {}; given the contraints above ??? 

Мой главный вопрос. Я пропустил что-то фундаментальное в отношении функций стрелок?

+0

* «Невозможность быть итератором» * Что это значит? Функции никогда не являются итераторами. Вы имели в виду конструктор? –

+0

@FelixKling Извините, я имею в виду генератор. Я уточню вопрос. – t3dodson

+0

Что значит, у них нет имени? Вы можете сделать что-то вроде: 'f = (a, b, c) => a + b + c' – Cristy

ответ

2

Это в основном правильно, но, вероятно, слишком сложно сказать, что функции Arrow имеют объект «нет» аргументов, поскольку это может означать, что он будет неопределенным. То, что они не делают это переопределить что ключевое слово в себе или для себя, так что остается определить как то, что он уже был в лексической области:

(function test(){ 
    let test2 =() => console.log(this,arguments); 
    test2(); 
}).bind({heya:true})(4,5); 

Это будет LOG: «{Хэя: истинно} , [4, 5] "; Зачем? Поскольку аргумент object и этот контекст просто остаются тем же самым внутри тела функции Arrow: внешний/лексический контекст не изменяется.

Кроме того, хотя сама функция Arrow не имеет имени в смысле определения функции.name, вы можете, конечно, присвоить его имени, а затем использовать это имя в теле функции стрелки, как в случае с эта каррирующая функция:

var curry = (f, ...args) => { 
    if (f.length <= args.length){ 
    return f(...args); 
    } 
    return (...more) => curry(f, ...args, ...more); 
}; 
Смежные вопросы