Fixed incorrect translation of the word closure (#22906)
This commit is contained in:
committed by
Gregory Gubarev
parent
8dfe458197
commit
d605db1769
@ -1,10 +1,10 @@
|
||||
---
|
||||
title: Closures
|
||||
localeTitle: Затворы
|
||||
localeTitle: Замыкания
|
||||
---
|
||||
# Затворы
|
||||
# Замыкания
|
||||
|
||||
Закрытие представляет собой комбинацию функции и лексической среды (области), в которой была объявлена эта функция. Закрытие - это фундаментальное и мощное свойство Javascript. В этой статье обсуждаются «как» и «почему» о закрытии:
|
||||
Замыкания представляет собой комбинацию функции и лексической среды (области), в которой была объявлена эта функция. Закрытие - это фундаментальное и мощное свойство Javascript. В этой статье обсуждаются «как» и «почему» о закрытии:
|
||||
|
||||
### пример
|
||||
|
||||
@ -49,7 +49,7 @@ function by(propName) {
|
||||
const arr_sorted = arr_.sort(by('height')); // [ { name: 'nicholas', height: 66 }, { name: 'rob', height: 70 },{ name: 'joe', height: 72 } ]
|
||||
```
|
||||
|
||||
Закрытие «запоминает» среду, в которой она была создана. Эта среда состоит из любых локальных переменных, которые были в области видимости на момент создания закрытия.
|
||||
Замыкания «запоминает» среду, в которой она была создана. Эта среда состоит из любых локальных переменных, которые были в области видимости на момент создания замыкания.
|
||||
|
||||
```js
|
||||
function outside(num) {
|
||||
@ -66,7 +66,7 @@ function outside(num) {
|
||||
remember2(); // This now executes the function 'inside' which console.logs(rememberedVar) => 9
|
||||
```
|
||||
|
||||
Закрытие полезно, потому что они позволяют вам «запоминать» данные, а затем позволяют работать с этими данными через возвращаемые функции. Это позволяет javascript эмулировать частные методы, которые находятся на других языках программирования. Частные методы полезны для ограничения доступа к коду, а также для управления глобальным пространством имен.
|
||||
Замыкания полезно, потому что они позволяют вам «запоминать» данные, а затем позволяют работать с этими данными через возвращаемые функции. Это позволяет javascript эмулировать частные методы, которые находятся на других языках программирования. Частные методы полезны для ограничения доступа к коду, а также для управления глобальным пространством имен.
|
||||
|
||||
### Частные переменные и методы
|
||||
|
||||
@ -93,11 +93,11 @@ const bankAccount = (initialBalance) => {
|
||||
account.deposit(10); // 110
|
||||
```
|
||||
|
||||
В этом примере мы не сможем получить доступ к `balance` из любой точки вне функции `bankAccount` , а это значит, что мы только что создали приватную переменную. Где закрытие? Ну, подумайте о том, что `bankAccount()` . Он фактически возвращает объект с кучей функций внутри него, и все же, когда мы вызываем `account.getBalance()` , функция может «запомнить» свою начальную ссылку на `balance` . Это сила закрытия, когда функция «запоминает» ее лексическую область (область времени компиляции), даже если функция выполняется вне этой лексической области.
|
||||
В этом примере мы не сможем получить доступ к `balance` из любой точки вне функции `bankAccount` , а это значит, что мы только что создали приватную переменную. Где закрытие? Ну, подумайте о том, что `bankAccount()` . Он фактически возвращает объект с кучей функций внутри него, и все же, когда мы вызываем `account.getBalance()` , функция может «запомнить» свою начальную ссылку на `balance` . Это сила замыкания, когда функция «запоминает» ее лексическую область (область времени компиляции), даже если функция выполняется вне этой лексической области.
|
||||
|
||||
**Эмуляция переменных с блочной областью.**
|
||||
|
||||
В Javascript не было понятия переменных с блочным диапазоном. Это означает, что при определении переменной внутри forloop, например, эта переменная видима также снаружи forloop. Итак, как могут закрытия помочь нам решить эту проблему? Давайте взглянем.
|
||||
В Javascript не было понятия переменных с блочным диапазоном. Это означает, что при определении переменной внутри forloop, например, эта переменная видима также снаружи forloop. Итак, как могут замыкания помочь нам решить эту проблему? Давайте взглянем.
|
||||
|
||||
```javascript
|
||||
var funcs = [];
|
||||
@ -148,7 +148,7 @@ const bankAccount = (initialBalance) => {
|
||||
|
||||
Как и в предыдущем примере, вы можете создавать функции, которые возвращают литералы объектов с методами, которые имеют доступ к локальным переменным объекта, не подвергая их воздействию. Таким образом, они становятся частными.
|
||||
|
||||
Закрытие также может помочь вам управлять глобальным пространством имен, чтобы избежать столкновений с глобально разделяемыми данными. Обычно все глобальные переменные распределяются между всеми сценариями в вашем проекте, что определенно даст вам много проблем при создании средних и больших программ. Вот почему библиотеки и авторы модулей используют закрытие, чтобы скрыть методы и данные всего модуля. Это называется шаблоном модуля, он использует выражение, вызываемое непосредственно вызываемым, которое экспортирует только определенные функции во внешний мир, что значительно сокращает количество глобальных ссылок.
|
||||
замыкания также может помочь вам управлять глобальным пространством имен, чтобы избежать столкновений с глобально разделяемыми данными. Обычно все глобальные переменные распределяются между всеми сценариями в вашем проекте, что определенно даст вам много проблем при создании средних и больших программ. Вот почему библиотеки и авторы модулей используют закрытие, чтобы скрыть методы и данные всего модуля. Это называется шаблоном модуля, он использует выражение, вызываемое непосредственно вызываемым, которое экспортирует только определенные функции во внешний мир, что значительно сокращает количество глобальных ссылок.
|
||||
|
||||
Вот краткий образец скелета модуля.
|
||||
|
||||
@ -169,7 +169,7 @@ var myModule = (function() = {
|
||||
myModule.method2(); // I am method 2, I am a private variable
|
||||
```
|
||||
|
||||
Закрытие полезно для захвата новых экземпляров частных переменных, содержащихся в «запоминаемой» среде, и к этим переменным можно получить доступ только через возвращаемую функцию или методы.
|
||||
замыкания полезно для захвата новых экземпляров частных переменных, содержащихся в «запоминаемой» среде, и к этим переменным можно получить доступ только через возвращаемую функцию или методы.
|
||||
|
||||
### Дополнительная информация:
|
||||
|
||||
|
Reference in New Issue
Block a user