-
Вопросы и задачи на собеседованиях 178
-
-
В JavaScript методы .call(), .apply() и .bind() используются для управления контекстом выполнения функций, т.е. для указания, каким объектом будет this
внутри функции.
1. .call()
Метод .call()
вызывает функцию с явным указанием контекста this
и аргументами, переданными по отдельности.
function greet(greeting, punctuation) {
console.log(greeting + ', ' + this.name + punctuation);
}
const person = { name: 'Alice' };
greet.call(person, 'Hello', '!'); // Output: "Hello, Alice!"
- Аргументы передаются через запятую.
2. .apply()
Метод .apply()
схож с .call()
, но аргументы передаются в виде массива.
greet.apply(person, ['Hi', '...']); // Output: "Hi, Alice..."
- Аргументы передаются в массиве.
3. .bind()
Метод .bind()
не вызывает функцию немедленно, а возвращает новую функцию с указанным контекстом this
, которая может быть вызвана позже.
const greetPerson = greet.bind(person, 'Hey', '.');
greetPerson(); // Output: "Hey, Alice."
-
Возвращает новую функцию, связанную с переданным контекстом
this
. -
Позволяет передавать частичные аргументы (каррирование).
-
.call() — вызывает функцию с контекстом и аргументами, переданными по отдельности.
-
.apply() — вызывает функцию с контекстом и аргументами в виде массива.
-
.bind() — возвращает новую функцию с указанным контекстом, но не вызывает её сразу.
-
-
-
-
-
-
-
-
IIFE (Immediately Invoked Function Expression) — это функция в JavaScript, которая создаётся и вызывается немедленно. Она используется для изоляции переменных и создания локальной области видимости, предотвращая "засорение" глобальной области видимости.
Пример IIFE:
(function() {
console.log("Это IIFE!");
})();
Объяснение:
- Функциональное выражение:
(function() { ... })
— это анонимная функция, заключённая в скобки, чтобы сделать её выражением. - Немедленный вызов:
()
— эти скобки сразу вызывают функцию.
Почему используется IIFE:
- Изоляция переменных: Переменные внутри IIFE не попадают в глобальную область видимости, что помогает избежать конфликтов имён переменных.
- Модульный код: Часто используется для создания модулей, которые работают независимо друг от друга.
- Закрытие (closure): IIFE создаёт локальную область видимости, и переменные внутри неё могут быть замкнуты и доступны только в пределах этой функции.
Пример с переменными:
(function() {
let message = "Привет, мир!";
console.log(message); // "Привет, мир!"
})();
// console.log(message); // Ошибка! message не доступна вне IIFE
В этом примере переменная message
доступна только внутри IIFE и не может быть использована снаружи.
-
-
-
-
-
NaN (Not-a-Number) — это специальное значение в программировании, которое используется для представления чисел, результат которых неопределен или не может быть выражен в числовом формате. Например, деление 0 на 0 или результат корня из отрицательного числа.
Как определить, что значение равно NaN?
В JavaScript есть специальная функция для проверки, является ли значение NaN:
isNaN(value)
Однако есть важный момент: NaN
не равен самому себе, что делает его уникальным среди значений. Чтобы точно проверить, является ли значение NaN, рекомендуется использовать:
Number.isNaN(value)
Эта функция работает более строго и не преобразует переданный аргумент в число перед проверкой.
Пример:
console.log(NaN === NaN); // false
console.log(isNaN(NaN)); // true
console.log(Number.isNaN(NaN)); // true
Источники NaN
Значение NaN может появиться в нескольких случаях, например:
- Результат недопустимых математических операций, таких как деление 0 на 0
- Преобразование нечислового значения в число, например, при использовании функции
parseInt
на строке, которая не содержит чисел
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-