Стрелочная функция
- возвращает значение и не требует использовать фигурные скобки {}, если состоит из одной строки. Если параметр функции один, то его можно объявлять без скобок ().
let print = p1 => console.log(p1)
print('Венера')//Венера
- p1 единственный параметр стрелочной функции;
- => console.log(p1) возвращаемое значение функции: return console.log(p1)
Если у стрелочной функции более одного параметра, то следует заключить их в круглые скобки. Также следует использовать фигурные скобки и ключевое слово 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, 'Путин') //Имя: не определено, фамилия: Путин