К чему точно относится “закрытие” в JavaScript?

предшествовавший или сопровождаемый?

, Если это - что-нибудь запускающееся с 'abc', это (сразу) не сопровождается 'defg', Вы хотите решение .

bmdhack, Если это - что-нибудь запускающееся с 'abc', этому (сразу) не предшествует 'defg', Вы хотите отрицательный lookbehind:

/\%(defg\)\@

Это будет соответствовать любому происшествию 'abc', пока это не часть 'defgabc'. См. :help \@ для получения дополнительной информации.

, Если Вы хотите соответствовать 'abc', пока это не часть 'defg. *abc', тогда просто добавляют .*:

/\%(defg.*\)\@

Соответствие 'abc 'только на строках, где 'defg' не происходит, подобно:

/\%(defg.*\)\@

, Хотя, если Вы просто делаете это для замены, можно сделать это легче путем объединения :v// и :s//

:%v/defg/s/abc //g

, Это заменит '< безотносительно>' для 'abc' на всех строках, которые не содержат 'defg'. См. :help :v для больше.

71
задан Andreas Grech 26 November 2009 в 06:52
поделиться

5 ответов

Из Замыкания JavaScript

Две сводки из одного предложения:

Замыкание - это локальные переменные для функция - сохраняется после функция вернула, или

Замыкание - это стековый кадр, который не освобождается, когда функция возвращается. (как если бы "стек-фрейм" malloc'ed вместо того, чтобы быть на стек!)

Очень хорошая статья о замыканиях

Замыкания в Javascript

«Закрытие» - это выражение (обычно функция), которая может иметь свободные переменные вместе с среда, которая связывает эти переменные (который "закрывает" выражение).

Простое объяснение Замыкания: что ECMAScript позволяет внутренним функции; определения функций и функциональные выражения, которые находятся внутри тела функций других функций. И эти внутренние функции разрешен доступ ко всем местным переменные, параметры и объявленные внутренние функции внутри их внешних функция (и). Замыкание образуется, когда одна из этих внутренних функций сделана доступны вне функции в который он содержал, так что он может выполняться после внешней функции вернулся. В этот момент все еще имеет доступ к локальным переменным, параметры и внутренняя функция объявления его внешней функции. Эти локальные переменные, параметр и объявления функций (изначально) имеют ценности, которые у них были, когда внешняя функция возвращена и может быть взаимодействует с внутренней функцией.

Хороший пример здесь

JavaScript, время проверять закрытие

45
ответ дан 24 November 2019 в 13:08
поделиться

Для меня замыкания в JS позволяют делать следующее.
"a" остается доступным во внутренней функции при добавлении к "b", хотя он объявлен снаружи.

function adder(a){
  return function(b){
    return a + b;
  };
}
var add5 = adder(5);
alert( add5(10) );

Для экстремального использования JS-замыканий вы можете взглянуть на исходный код PURE библиотека (шаблонизатор JS)

4
ответ дан 24 November 2019 в 13:08
поделиться

По сути, замыкание - это тело функции, закрытое над своими идентификаторами (переменными) в своей локальной среде.

1
ответ дан 24 November 2019 в 13:08
поделиться

Это функция, которая «удерживает» ссылку или ссылки на что-то в другой области. Например:

var myArrayOfFunctions = [];

for(var i = 0; i<3: i++)
{
    //Note how the function being defined uses i, 
    //where i lives in the parent's scope, this creates a closure
    myArrayOfFunctions[i] = function(a) { return a + i;}    
}

myArrayOfFunctions[0](5);   //Prints 8 WTF!
myArrayOfFunctions[1](5);   //8 again
myArrayOfFunctions[2](5);   //Well, this 8 was expected

Это происходит потому, что когда функции «создаются», они не копируют значение i, они содержат ссылку на i, поэтому, когда мы вызываем функции, они используют текущее значение i, равное 3.

Вот графическое объяснение.

6
ответ дан 24 November 2019 в 13:08
поделиться

Насколько я могу судить, замыкание - это функция, определенная в другой функции, которая переживает область видимости родительской функции. Типичный пример - обратные вызовы:

function delay_message(msg)
{
     setTimeout(function closure() { alert(msg); }, 1000);
}

В этом случае вышеупомянутое закрытие функции определено в теле delay_message , но определение функции - а также переменная родительской функции msg - переживет объем вызова функции delay_message .

2
ответ дан 24 November 2019 в 13:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: