2010-06-21 3 views
4

Можно создать дубликат:
JavaScript: Why the anonymous function wrapper?Какова цель следующей структуры JS?

Иногда я вижу структуру, как это в программах JS:

(function() { 
// blah blah 
})(); 

Есть идеи что это делает и каковы его побочные эффекты и преимущества?

+1

Подобный недавний вопрос: http://stackoverflow.com/questions/3082149/javascript-why-use-an-anonymous-function-here –

ответ

9

Это создание новой области действия (во избежание загрязнения родительской). Удивительно (для начинающих, знакомых с C-подобных языках), JavaScript не создает новые возможности при использовании брекетов в одиночку:

{ 
    var a = "foo"; 
} 
// a still == "foo". 

(function() { 
    var b = "bar"; 
})(); 
// b doesn't exist. 

Однако функции всегда создают новые возможности. Благодаря закрытию JavaScript существующие переменные из родительских областей автоматически отображаются (закрыты) в анонимную функцию. Поэтому в случаях (например, в вопросе), где анонимная функция больше нигде не используется (поскольку она никогда не назначается), она в основном действует как скобка C-стиля.

2

Это предотвращает загрязнение глобального пространства имен. То есть идентификаторы не будут просачиваться в остальную часть страницы/кода/скрипта.

3

В отличие от многих других языков с фигурными скобками, JavaScript не включает переменные области видимости в ближайший закрывающий блок. Вместо этого var операторам присваиваются переменные области видимости. Общей ошибкой среди программистов JavaScript является объявление var s внутри цикла или условное с предположением, что они выйдут из области действия в конце блока.

Создание анонимной функции, а затем ее немедленное выполнение (путем размещения () после нее) вызывает создание новой области, гарантируя, что переменные, объявленные внутри wil, не будут мешать другому JavaScript, который может быть висит вокруг. Обертка всего объекта в другом наборе parens делает его выражением, которое может разрешить некоторые неоднозначности синтаксиса для максимальной совместимости с браузером.

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