add typescript

This commit is contained in:
2025-02-28 14:39:31 +03:00
parent 7d94ca6021
commit 99dffd0a1d
135 changed files with 1098 additions and 349 deletions

View File

@@ -0,0 +1,60 @@
---
sidebar_position: 4
---
# Стрелочные функции
Существует ещё один очень простой и лаконичный синтаксис для создания функций, который часто лучше, чем Function Expression.
```js
let sum = (a, b) => a + b;
```
## У стрелочных функций нет «this»
Если происходит обращение к this, его значение берётся снаружи.
❗ ***Стрелочные функции нельзя использовать с new***
> Отсутствие this естественным образом ведёт к другому ограничению: стрелочные функции не могут быть использованы как конструкторы. Они не могут быть вызваны с new.
Стрелочные функции VS bind
Существует тонкая разница между стрелочной функцией => и обычной функцией, вызванной с .bind(this):
- .bind(this) создаёт «связанную версию» функции.
- Стрелка => ничего не привязывает. У функции просто нет this. При получении значения this оно, как обычная переменная, берётся из внешнего лексического окружения.
## Стрелочные функции не имеют «arguments»
Это отлично подходит для декораторов, когда нам нужно пробросить вызов с текущими this и arguments.
```js
function defer(f, ms) {
return function() {
setTimeout(() => f.apply(this, arguments), ms)
};
}
function sayHi(who) {
alert('Hello, ' + who);
}
let sayHiDeferred = defer(sayHi, 2000);
sayHiDeferred("John"); // выводит "Hello, John" через 2 секунды`
```
То же самое без стрелочной функции выглядело бы так:
```js
function defer(f, ms) {
return function(...args) {
let ctx = this;
setTimeout(function() {
return f.apply(ctx, args);
}, ms);
};
}
```
#### Стрелочные функции:
- Не имеют this.
- Не имеют arguments.
- Не могут быть вызваны с new.
- У них также нет super.