JavaScript объем и закрытие

использовать свойство.GetConstantValue () для получения значения

13
задан Crescent Fresh 10 March 2009 в 17:05
поделиться

5 ответов

Точка этого - то, что любые переменные, объявленные в интересном материале, не будут созданы в глобальном пространстве имен. Любая функция в JavaScript создаст такой объем. Предположим, что у Вас есть некоторый JavaScript, который Вы хотите запустить. Если Вы делаете это:

var b = 1; 
// stuff using b

И некоторый другой код использует b, это получит Ваше перенесенное значение. (Или, еще хуже, если некоторые другие кодовые наборы b перед Вашими выполнениями кода, то попытки получить его старое значение позже, Вы изменили бы его тем временем.)

, С другой стороны, если у Вас есть этот код, который объявляет и затем вызывает функцию:

function a() { 
     var b = 1;
}

a();

И некоторый другой код позже использует b, он не будет видеть Ваши значения, так как b локален для функции. Проблема с этим, конечно, состоит в том, что Вы все еще делаете глобальное имя - "a" в этом случае. Так, мы хотим функцию без имени - это - то, почему Вы получаете код, который Вы описали. Это объявляет функцию без имени и затем называет его.

, К сожалению, Вы не можете просто сказать:

function() { ... }()

, потому что это будет проанализировано как оператор объявления функции и затем синтаксическая ошибка. Путем обертывания объявления функции в круглую скобку Вы получаете функцию выражение , которое можно тогда назвать. Вы называете его как любое другое выражение function (как a, выше), с помощью второго набора parens. Например, если бы функция взяла аргументы, то Вы передали бы их туда:

(function(a) { ... })(1)
30
ответ дан Jesse Rusak 11 March 2009 в 03:05
поделиться

То средство конструкции объявляет анонимную функцию и сразу выполняет ее. Причина Вы помещаете свой код в теле функции, состоит в том, потому что переменные, которые Вы определяете в нем, остаются локальными для функции и не как глобальные переменные. Однако они все еще будут видимы к закрытиям, определенным в этой функции.

1
ответ дан Chetan Sastry 11 March 2009 в 03:05
поделиться

Вставление объявления функции parens создает выражение, которое оценивает к анонимной функции в. Поэтому первое вводное оценивает к функции.

"пустые parens" в конце вызывают определенную функцию, таким образом, "//делают интересный материал" сразу выполняется.

Это - способ выполнить код на лету, также не допуская переменные в глобальную область видимости.

то, Что проиллюстрировано здесь, однако, не имеет никакого отношения к закрытиям - по крайней мере, не непосредственно. Закрытия о поддержании лексического контекста после того, как родительская функция уже вышла.

0
ответ дан Triptych 11 March 2009 в 03:05
поделиться

parens вокруг функции проясняют, что функция является выражением. parens после являются вызовом к функции.

Уведомление, что функция не имеет имени.

1
ответ дан John Saunders 11 March 2009 в 03:05
поделиться

Это создает функцию, называет ее и отбрасывает ее.

могло бы быть более ясно, смотрите ли Вы на него как это:

var throwaway = function(){
    // do cool stuff
};
throwaway();

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

6
ответ дан Matthew Marshall 11 March 2009 в 03:05
поделиться
Другие вопросы по тегам:

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