Дело в том, что любые переменные, объявленные в классном материале, не будут созданы в глобальном пространстве имен. Любая функция в javascript создаст такую область видимости. Предположим, у вас есть какой-то JavaScript, который вы хотите запустить. Если вы сделаете это:
var b = 1;
// stuff using b
И какой-то другой код использует b, он получит ваше оставшееся значение. (Или, что еще хуже, если какой-то другой кодовый набор b до запуска вашего кода будет запущен, а затем попытается получить его старое значение, вы тем временем измените его.)
С другой стороны, если у вас есть этот код, который объявляет и затем вызывает функцию:
function a() {
var b = 1;
}
a();
И какой-то другой код позже использует b, он не увидит ваши значения, так как b локально для функции. Проблема с этим, конечно, в том, что вы все еще делаете глобальное имя - в данном случае «а». Итак, нам нужна функция без имени - вот почему вы получаете код, который вы описали. Он объявляет функцию без имени, а затем вызывает ее.
К сожалению, вы не можете просто сказать:
function() { ... }()
потому что это будет проанализировано как объявление функции оператор , а затем синтаксическая ошибка. Заворачивая объявление функции в круглые скобки, вы получаете функцию выражение , которую затем можно вызвать. Вы называете это как любое другое выражение функции (например, выше), используя второй набор символов. Например, если функция принимает аргументы, вы передаете их туда:
(function(a) { ... })(1)