«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Освоение функций JavaScript: руководство по обычным функциям и стрелочным функциям

Освоение функций JavaScript: руководство по обычным функциям и стрелочным функциям

Опубликовано 8 ноября 2024 г.
Просматривать:896

Mastering JavaScript Functions: Your Guide to Normal vs. Arrow Functions

В JavaScript функции являются фундаментальным строительным блоком языка, позволяющим разработчикам определять повторно используемые блоки кода. Двумя основными типами функций в JavaScript являются обычные функции и стрелочные функции. Хотя на первый взгляд они могут показаться похожими, они имеют явные различия с точки зрения синтаксиса, поведения и вариантов использования. В этой статье мы шаг за шагом рассмотрим эти различия, предоставив подробные примеры и охватив все сценарии, чтобы помочь вам эффективно понять нюансы между обычными функциями и стрелочными функциями.

Обычные функции против стрелочных функций: исследование различий
Синтаксис
Обычные функции в JavaScript определяются с использованием ключевого слова function, за которым следуют имя функции, параметры (если есть) и тело функции, заключенное в фигурные скобки. Вот пример:

function add(a, b) {
    return a   b;
}

Стрелочные функции, с другой стороны, предоставляют более краткий синтаксис, представленный в ES6. Они используют обозначение стрелки (=>) и опускают ключевое слово function и фигурные скобки для однострочных функций. Например:

const add = (a, b) => a   b;

Лексическое это Привязка
Одно из наиболее существенных различий между обычными функциями и стрелочными функциями заключается в том, как они обрабатывают ключевое слово this. В обычных функциях значение this определяется тем, как вызывается функция. Напротив, стрелочные функции не привязывают свою собственную this, а наследуют ее от окружающей области. Проиллюстрируем это на примере:

const person = {
    name: 'John',
    sayHello: function() {
        console.log(`Hello, ${this.name}!`);
    }
};

person.sayHello(); // Output: Hello, John!

const personArrow = {
    name: 'Jane',
    sayHello: () => {
        console.log(`Hello, ${this.name}!`);
    }
};

personArrow.sayHello(); // Output: Hello, undefined!

В приведенном выше примере функция person.sayHello() правильно регистрирует «Привет, Джон!» поскольку это относится к объекту person. Однако personArrow.sayHello() регистрирует «Привет, не определено!» поскольку стрелочные функции не имеют собственной привязки this, в результате чего она наследует значение this из глобальной области, где имя не определено.

аргументы Объект
Еще одно различие заключается в объекте аргументов. Обычные функции имеют доступ к объекту аргументов, который представляет собой объект, подобный массиву, содержащий все аргументы, переданные функции. Однако стрелочные функции не имеют собственного объекта аргументов. Давайте проиллюстрируем это с помощью e

xample:

function sum() {
    let total = 0;
    for (let i = 0; i  {
    let total = 0;
    for (let i = 0; i 



В приведенном выше примере функция sum() правильно вычисляет сумму всех переданных ей аргументов с использованием объекта аргументов. Однако sumArrow() выдает ошибку ReferenceError, поскольку стрелочные функции не имеют доступа к аргументам.

новое ключевое слово
Обычные функции можно использовать в качестве функций-конструкторов с ключевым словом new для создания новых экземпляров объектов. Однако стрелочные функции нельзя использовать в качестве конструкторов. Использование стрелочных функций с new приведет к ошибке типа. Вот пример:

function Person(name) {
    this.name = name;
}

const john = new Person('John');
console.log(john.name); // Output: John
const PersonArrow = (name) => {
    this.name = name;
}

const jane = new PersonArrow('Jane'); // TypeError: PersonArrow is not a constructor

Раздел часто задаваемых вопросов
В: Когда следует использовать обычные функции вместо стрелочных?
О: Используйте обычные функции, когда вам нужен доступ к ключевому слову this, объекту аргументов или при определении функций-конструкторов. Стрелочные функции предпочтительнее использовать для кратких однострочных сообщений или когда вы хотите сохранить лексическую область видимости.

Вопрос: Могут ли стрелочные функции иметь имя?
О: Нет, стрелочные функции не могут иметь имени. По умолчанию они анонимны.

В: Функции со стрелками работают быстрее, чем обычные функции?
О: Существенной разницы в производительности между функциями стрелок и обычными функциями нет. Выбор между ними должен основываться на их конкретных вариантах использования и читабельности.

В: Могу ли я использовать функции стрелок в методах объекта?
О: Да, стрелочные функции можно использовать в методах объекта, но будьте осторожны, поскольку они не связывают свои собственные this, что может привести к неожиданному поведению.

Заключение
Подводя итог, можно сказать, что хотя и обычные функции, и стрелочные функции служат для определения функций в JavaScript, они различаются синтаксисом, поведением и вариантами использования. Понимание этих различий имеет решающее значение для написания чистого, эффективного и безошибочного кода. Рассмотрев сценарии, изложенные в этой статье, вы сможете принять обоснованные решения о том, когда использовать каждый тип функции в ваших проектах JavaScript.

Помните, что не существует универсального решения, и выбор между обычными функциями и стрелочными функциями в конечном итоге зависит от конкретных требований вашего кода и ваших предпочтений в стиле кодирования.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/kafeel_ahmad/mastering-javascript-functions-your-guide-to-normal-vs-arrow-functions-2onk?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с Study_golang@163 .com, чтобы удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3