Идиома JavaScript: создайте функцию только для ее вызова

Я изучаю YUI и иногда видел эту идиому:

 (function x(){ do abcxyz})();  

Почему они создают функцию только для ее вызова? Почему бы просто не написать:

  do abcxyz  

Например, см. Здесь .

Они используют закрытие .

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

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

 var counter = 0; var genId = function() { counter = counter + 1; return counter; } 

Тем не менее, теперь любой может испортить счетчик , и теперь я загрязнил глобальное пространство имен двумя переменными ( counter и genId ).

Вместо этого я мог использовать анонимную функцию для генерации моей функции счетчика:

 var genId = function() { var counter = 0; var genIdImpl = function() { counter = counter + 1; return counter; } return genIdImpl; }(); 

Теперь у меня есть только одна переменная в глобальном пространстве имен, что выгодно. Что еще более важно, переменная счетчика теперь не может быть изменена – она ​​существует только в области анонимной функции, и поэтому к ней может обращаться только функция genIdImpl (которая была определена в той же области).

Похоже, что в примере кода YUI они просто хотят выполнить код, который вообще не загрязняет глобальное пространство имен.

Думаю, они хотят избежать конфликтов пространства имен. Кажется хорошей практикой в ​​JS.