Я тебя прикрыл !!
Прежде чем углубляться в какую-либо новую тему, всегда важно понять, ПОЧЕМУ мы должны ее использовать. Итак, давайте сначала поймем это.
Преимущества ES6
- Они помогают в написании кратких функций JavaScript.
- У них есть неявный возврат, что позволяет нам писать однострочные функции.
- Они не связывают this, что очень полезно для обработчиков кликов.
Ничего страшного, если вы не понимаете полного значения их всех сейчас, потому что к концу этого урока вы поймете.
[Знаете ли вы: функция стрелки - самая популярная функция ES6]
Давайте начнем с основного синтаксиса стрелочных функций, а затем рассмотрим примеры.
Синтаксис функции стрелки
// No parameters () => { statements } // single parameter (param) => { statements } param => { statements } // multiple parameters (param1,param2,....paramN) => { statements } // Returning objects // enclose objects by parenthesis so they can be treated as objects (param1,param2) => ( { id: 1 , key: value });
Вот и все!! Легко, правильно !! Теперь вы знаете синтаксис для функций со стрелками, так что давайте запачкаем руки. Во всех примерах я собираюсь провести сравнение между ES6 и ES5, чтобы помочь вам разобраться в новых стрелочных функциях.
Пример 1:
var imgUrlArray = [ imgUrl1, imgUrl2 ]; //ES5 imgUrlArray.map(function (img){ return img; }); //ES6 imgUrlArray.map(img => img);
В ES6 вы можете пропустить ключевое слово function и ключевое слово return, а также некоторые круглые скобки, фигурные скобки и точки с запятой.
Пример 2:
// Expressions // ES5 var plusOne = [1,2,3,4,5].map(function(num){ return num + 1 }); // ES6 var plusOne = [1,2,3,4,5].map(num => num + 1); // implicit return
Пример 3:
Цепочки обещаний можно предопределить с помощью стрелочных функций. Поскольку return является неявным, писать его не нужно. Это снижает вероятность ошибок и упрощает понимание и работу с обещаниями.
// ES5 someFunctionReturningPromise .then(function(data1){ console.log(data1); }).then(function(data2){ console.log(data2); }).catch(function(err){ console.log(err); }); // ES6 someFunctionReturningPromise .then((data1) => console.log(data1) ) .then((data2) => console.log(data2) ) .catch((err) => console.log(err) );
Лексическое слово this
Итак, в прошлом вы бы использовали такие утверждения, как -
.bind(this) var abc = this;
Это известно как лексическая область видимости. Раньше каждая новая функция определяла собственное значение this
. Это оказалось далеко не идеальным вариантом для объектно-ориентированного стиля программирования. Стрелочная функция не заново определяет свое собственное this
при выполнении. Значение this
всегда наследуется из окружающей области.
// ES5
function Counter(){
this.seconds = 0;
window.setInterval(function() {
this.seconds++;
}.bind(this), 1000);
}
//ES6
function Counter(){
this.seconds =0;
window.setInterval( () => this.seconds++,1000 );
}
Большинство людей знают о this
функции ES6, но очень немногие знают о том, что стрелочные функции ES6 также не связывают их собственные аргументы.
const funct = () => { console.log(arguments); // This will throw reference error } // undefined
Теперь с ES6 невозможно получить неопределенное количество аргументов внутри массива.
Когда их избегать ?? (Вас предупредили!)
После изучения функций стрелок у вас может возникнуть соблазн заменить все свои функции ES5, но прежде чем вы это сделаете, важно понять, что функции стрелок нельзя использовать в качестве
- Конструкторы
var Person= (param) => { this.name = param; } var Boy = new Person('Ram'); // Throws error that Person is not a constructor
- Функции обратного вызова с динамическим контекстом
Слушатели событий очень часто прикрепляются к элементам DOM, таким как нажатие кнопки. Событие запускает функцию обработчика с this
в качестве целевого элемента.
var button = document.getElementById('myButton');
button.addEventListener('click', () => {
console.log(this === window); // true and this != button
this.innerHTML = 'Clicked button';
});
- С новым ключевым словом
var func = () => { console.log("Hello"); }; var func1 = new func(); // Uncaught TypeError: func is not a constructor
Стрелочные функции не работают как конструкторы и не имеют внутреннего метода [[Construct]].
Поэтому в таких случаях вам следует использовать function ().
Хотите узнать больше?? Нужны еще примеры ?? Вот статья, которую я нашел действительно полезной
Если вам удалось чему-то научиться из этого руководства, не забудьте хлопнуть в ладоши 👏
Больше таких сообщений в моем новом личном блоге https://twishasaraiya.github.io/