Skip to content

Commit b66b486

Browse files
committed
fixes
1 parent 0ea7976 commit b66b486

1 file changed

Lines changed: 7 additions & 7 deletions

File tree

  • 1-js/06-advanced-functions/07-new-function

1-js/06-advanced-functions/07-new-function/article.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ let sayHi = new Function('alert("Hello")');
2929
sayHi(); // Hello
3030
```
3131

32-
Главное отличие от других способов объявления функции, которые были рассмотрены ранее, заключается в том, что функция создаётся полностью «на лету» из строки.
32+
Главное отличие от других способов объявления функции, которые были рассмотрены ранее, заключается в том, что функция создаётся полностью "на лету" из строки.
3333

34-
Всё предыдущие объявления требовали от нас, программистов, писать объявление функции в скрипте.
34+
Все предыдущие объявления требовали от нас, программистов, писать объявление функции в скрипте.
3535

3636
Но `new Function` позволяет превратить любую строку в функцию. Например, можно получить новую функцию с сервера и затем выполнить ее:
3737

@@ -62,7 +62,7 @@ function getFunc() {
6262
return func;
6363
}
6464

65-
getFunc()(); // ошибка: значение не определено
65+
getFunc()(); // ошибка: value не определено
6666
```
6767

6868
Сравним это с обычным объявлением:
@@ -83,19 +83,19 @@ getFunc()(); // *!*"test"*/!*, из лексического окружения
8383

8484
Эта особенность `new Function` выглядит странно, но оказывается очень полезной на практике.
8585

86-
Представьте, что нужно создать функцию из строки. Код этой функции неизвестен во время написания скрипта (вот поэтому не используем обычные функции), а будет определен только в процессе выполнения. Мы можем получить код с сервера или другого ресурса.
86+
Представьте, что нужно создать функцию из строки. Код этой функции неизвестен во время написания скрипта (вот поэтому не используем обычные функции), а будет определён только в процессе выполнения. Мы можем получить код с сервера или другого ресурса.
8787

8888
Наша новая функция должна взаимодействовать с основным скриптом.
8989

9090
А что, если мы хотим, чтобы она имела доступ к внешним локальным переменным родителя?
9191

92-
Проблема в том, что до отправки JavaScript-кода на продакшен, код сжимается с помощью *минификатора (minifier)* - специальная программа, которая уменьшает размер кода, удаляя комментарии, лишние пробелы, и, что самое главное, переименовывает локальные переменные в более короткие.
92+
Проблема в том, что перед отправкой JavaScript-кода на реальные работающие проекты код сжимается с помощью *минификатора* - специальной программы, которая уменьшает размер кода, удаляя комментарии, лишние пробелы, и, что самое главное, локальным переменным даются укороченные имена.
9393

9494
Например, если в функции объявляется переменная `let userName`, то минификатор изменяет её на `let a` (или другую букву, если она не занята), и изменяет её везде. Обычно так делать безопасно, потому что переменная является локальной и никто снаружи не имеет к ней достп. И внутри функции минификатор заменяет каждое её упоминание. Минификаторы достаточно умные. Они не просто "тупой" поиск-замена, они анализируют структуру кода, и поэтому ничего не ломают.
9595

96-
Но если `new Function` может получить доступ к внешним локальным переменным родителя, то она не сможет найти `userName`, так как она выполняется *после* минификации кода.
96+
Но если `new Function` могла бы получить доступ к внешним локальным переменным родителя, то она не смогла бы найти `userName`, так как она выполняется *после* минификации кода.
9797

98-
**Даже если бы мы могли получить доступ к внешнему лексическому окружению `new Function`, у нас были бы проблемы с миниификаторами.**
98+
**Даже если бы мы могли получить доступ к внешнему лексическому окружению `new Function`, у нас были бы проблемы с минификаторами.**
9999

100100
"Особое свойство" `new Function` бережёт нас от ошибок.
101101

0 commit comments

Comments
 (0)