name у функции в JavaScript
- Что такое name
- Function Declaration
- Function Expression
- Стрелочные функции
- Анонимные функции
- name после bind()
- Где используется name
- Итого
name - это свойство функции, в котором хранится ее имя.
function sayHello() {
console.log('Привет!');
}
console.log(sayHello.name);
Результат:
sayHello
Свойство name не вызывает функцию. Оно просто возвращает строку с именем функции.
Что такое name
В JavaScript функция - это значение. У этого значения есть свои свойства, и одно из них - name.
function getUser() {
return 'Анна';
}
console.log(getUser.name);
Результат:
getUser
Так можно узнать, как называется функция.
Function Declaration
У функции, объявленной через Function Declaration, имя берется из объявления.
function calculatePrice() {
return 1000;
}
console.log(calculatePrice.name);
Результат:
calculatePrice
Здесь имя функции - calculatePrice.
Function Expression
Если функция записана в переменную, JavaScript часто берет имя из этой переменной.
let showMessage = function () {
console.log('Сообщение');
};
console.log(showMessage.name);
Результат:
showMessage
Хотя сама функция записана без имени, JavaScript понимает, что она лежит в переменной showMessage.
Функция может иметь и свое имя внутри выражения.
let showMessage = function message() {
console.log('Сообщение');
};
console.log(showMessage.name);
Результат:
message
В этом случае свойство name вернет имя message, потому что оно указано у самой функции.
Стрелочные функции
У стрелочной функции тоже может быть свойство name.
let double = (number) => number * 2;
console.log(double.name);
Результат:
double
Имя взялось из переменной double.
Анонимные функции
Если анонимная функция никуда не записана, имени у нее может не быть.
console.log((function () {}).name);
Результат:
В консоль выведется пустая строка.
На практике такие функции часто встречаются как callback-функции.
setTimeout(function () {
console.log('Готово');
}, 1000);
В этом примере имя функции обычно не важно, потому что мы не обращаемся к ней отдельно.
name после bind()
Если создать новую функцию через bind(), ее имя начинается со слова bound.
function showName() {
console.log(this.name);
}
let user = {
name: 'Анна'
};
let boundShowName = showName.bind(user);
console.log(boundShowName.name);
Результат:
bound showName
Так JavaScript показывает, что это функция, полученная через bind().
Где используется name
Свойство name чаще всего полезно для отладки, логов и сообщений об ошибках.
function validateEmail(email) {
return email.includes('@');
}
console.log('Запущена функция: ' + validateEmail.name);
Результат:
Запущена функция: validateEmail
Но строить основную логику программы на name обычно не стоит. Имя функции - это скорее служебная информация.
Итого
1. name возвращает имя функции строкой.
2. У Function Declaration имя берется из объявления функции.
3. У Function Expression и стрелочных функций имя часто берется из переменной.
4. У анонимной функции без переменной имя может быть пустой строкой.
5. После bind() имя функции начинается с bound.