Точка этого - то, что любые переменные, объявленные в интересном материале, не будут созданы в глобальном пространстве имен. Любая функция в 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)
Это упомянуто в MSDN . Не похоже, что в окне Watch есть хорошее решение (я думаю, вы можете получить оформленное имя вашего класса из листинга).
Ваша идея с "глупым пространством имен" сработает нормально, вы также можете просто объявить идентичный класс с глупым именем и вместо этого привести его к этому типу.