Стрелочная функция

возвращает значение и не требует использовать фигурные скобки {}, если состоит из одной строки. Если параметр функции один, то его можно объявлять без скобок ().
let print = p1 => console.log(p1) print('Венера')//Венера

Если у стрелочной функции более одного параметра, то следует заключить их в круглые скобки. Также следует использовать фигурные скобки и ключевое слово return, если в теле функции более одной строки.

let print2=(p1, p2)=>{ let x = p1 + p2 return x } let summ = print2(2, 2) console.log(summ)//4

Стрелочная функция вложенная в другую нестрелочную функцию, не изолирует ключевое слово this. Ключевое слово this в стрелочной функции ссылается на свойства (переменные) и методы (функции) объекта, в котором оно вызывается:

let oneObject = { v1:'hello', f1:function(){ function callF(){//функция обратного вызова функции f1:function() //console.log(this)//window return this.v1//ссылается на объект window } return (callF()) //вернет undefined (не определено) //т к у объекта window отсутствует v1 }, f2(){//здесь сокращенный вариант записи метода объекта (function()) let callFA=()=>{ //стрелочная функция обратного вызова функции f2() //console.log(this)//текущий объект oneObject return this.v1//ссылается на v1:'hello' } return (callFA())//вернет hello } console.log('f1: '+oneObject.f1(), 'f2() '+oneObject.f2())//undefined, hello

Стрелочная функция не изолирует область видимости this. Если вызвать стрелочную функцию внутри другой стрелочной функции, то this будет так же ссылаться на объект window.

window.v1='объект window' let oneObject = { v1:'hello', f2:()=>{//анонимная стрелочная функция let f22 = ()=>this.v1 return f22() } } console.log(oneObject.f2())//объект window

Параметры по умолчанию позволяют использовать значения при отсутствии переданных аргументов.

let x = (firstName='не определено',lastName='не определена')=> console.log(`Имя: ${firstName}, фамилия: ${lastName}`) x('Василий') //Имя: Василий, фамилия: не определена x(undefined, 'Путин') //Имя: не определено, фамилия: Путин