2014-11-23 7 views
6

В связи с закрытием, я часто читал, что что-тозакрывает над что-то еще в качестве средства для объяснения закрытия.Что именно означает «закрытие»?

Теперь у меня нет особых проблем с пониманием закрытия, но «закрытие» представляется более фундаментальным понятием. Иначе нельзя было бы говорить об этом, чтобы объяснить закрытие, было бы?

Что такое точное определение закрытия над, и что это что-то и что-то еще? Откуда этот термин?

+1

Обычно это означает «добавить элементы к набору, а затем еще несколько *» - часть * * больше, чтобы убедиться, что свойства набора остаются в силе - в этом случае это среды, в которых вы получаете свои значения от - вы добавляете те, и все, что вам может понадобиться для них, вы используете внутри лямбды - это закрытие – Carsten

ответ

8

Рассмотрим:

something closes over something else 
|_______| |_________| |____________| 
    |   |    | 
subject  verb  object 

Здесь:

  1. Субъект замыкание. Закрытие - это функция.
  2. Закрытие “ закрывает над ” (как в окружающих) набор его свободных переменных.
  3. Объект - это набор свободных переменных замыкания.

Рассмотрим простую функцию:

function add(x) { 
    return function closure(y) { 
     return x + y; 
    }; 
} 

Здесь:

  1. Функция имени add имеет только одну переменную с именем x, которая не является свободной переменной, поскольку она определена в пределах объем add сам.
  2. Функция имени closure имеет две переменные, названные x и y, из которых x является свободной переменной, так как она определена в объеме add (не closure) и y не является свободной переменной, поскольку она определена в объем closure сам.

Следовательно, во втором случае функция с именем closure называется “ близко над ” переменной с именем x.

Поэтому:

  1. Функция имени closure называется замыканием переменной с именем x.
  2. Переменная с именем x называется upvalue функции с именем closure.

Вот и все.

+2

(1) Все это можно сказать несколькими словами: * «A закрывается над B» == " B - свободная переменная A ", где свободными переменными являются те, которые появляются в теле функции, но не в ее сигнатуре. * (2) Ответ не дает никакой интуиции о том, что визуализировать и почему термин« закрывается »(и «закрытие»). Это связано с семантикой (что-то близко? Или что-то становится ближе?), Или это слово выбрано для того, чтобы сделать дискуссии более глубокими и загадочными? –

+0

Не стесняйтесь написать свой собственный ответ. –

Смежные вопросы