Какую технику использует код отслеживания Google Analytics?

Код отслеживания Google Analytics выглядит следующим образом:

(function() {
code
  })();

Какую технику они используют с этими скобками - (stuff)() - называется? Что он делает?

Я помещаю код Google Analytics перед тегом закрытия заголовка на своей странице, а затем создаю вокруг него оператор if (я включаю в себя плагин cookie JQuery дальше):

<script type="application/javascript">
if ($.cookie('allowcookies') == 'yes') {
analytics code
}
</script>

Он не работал, пока я не использовал ту же технику вокруг моего кода:

(function() {if ($.cookie('allowcookies') == 'yes') {

analytics code
}
})();

Почему он не запускался, прежде чем я это сделал? Зачем это выполнялось после?

+2
источник поделиться
3 ответа
(function() {
   /* code */
}()); 

Общеизвестно как "самозанятая анонимная функция (& sup1;)" ( "непосредственный вызов функции" ), и ее основное использование заключается в том, чтобы избежать создания переменных в глобальную (или во внешней) области.

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

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

/* outer scope */  
(function(outerscope) {

   element.onsomeevent = function() {
       /* do something with outerscope */
   };

}(this));

Другое практическое применение, которое я делаю с этим выражением, - это когда мне нужно создать функцию, которая будет вскоре выполнена внутри функции-конструктора, когда она вызывается с ключевым словом new (вместо явного вызова некоторого метода init).


(& sup1;) — как указано в книге "Mantainable Javascript" Николаса Закаса (O'Reilly, ISBN 978-1-449-32768-2) стр. 44, предлагаемое выражение (function() {}()), с вложенными паранами (даже если (function() {})() будет работать в любом случае )

[...] Чтобы было очевидно, что происходит непосредственный вызов функции, поместите парезы вокруг функции [...]

См. также Синтаксис непосредственного вызова функции

+8
источник

Часть "function() {code}" создает только функцию,() в конце вызывает созданную функцию. Вы можете переписать

(function() {
code
  })();

Как

var x = function() {code};
x();
+3
источник

Это просто функция выбора вызова. В конце() в конце он автоматически вызывается.

Он используется так, чтобы изолировать локальные переменные, которые имеют отношение только к вашему коду из глобальной области.

Например:

(function() {

   var x = 5;
   window.y = 6;

})();

x доступен только в рамках функции, y доступен глобально через окно.

Что касается того, что он не работает, я бы поставил под угрозу это условие, которое вы предоставили.

+1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос