2012-05-02 5 views
2

Можно создать дубликат:
Location of parenthesis for auto-executing anonymous JavaScript functions?
Is there a difference between (function() {…}()); and (function() {…})();?
Two ways of immediate call to anonymous function (function(d){ }()); and (function(x){ })();Javascript анонимная функция - определение

Есть ли разница между данными 2-мя способами декларирования и вызова анонимной функции?

Вариант 1:

(function(){ 
    console.log('Declare and call anonymous function'); 
})(); 

Вариант 2:

(function(){ 
    console.log('Declare and call anonymous function'); 
}()); 

Обе функции вызываются, как только это evaluated.But я не мог понять разницу.

+0

Вариант 1 гарантирует, что функция определена и доступна перед ее вызовом. Возможно, это делается для совместимости (браузеры могут вести себя по-разному в ситуациях сложного определения функции). – Brendan

+0

Вариант 3:! Function() {console.log («Объявлять и вызывать анонимную функцию»); }() – GillesC

+0

См. Мой ответ на http://stackoverflow.com/a/3783287/5445, нет * практической * разницы, есть только разница на уровне * грамматики *. – CMS

ответ

1

Нет, нет никакой разницы: эти два варианта синтаксически различны, но семантически эквивалентны. Рассмотрим указанную функцию:

(foo()) 

vs.

и, возможно, это яснее, как они то же самое.

+0

Может быть разница: 'new (foo)()' не равно 'new (foo())'. –

+0

Ах, из-за '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '? Хороший момент, но я не думаю, что стоит добавить это к моему ответу, поскольку этот вопрос выглядит как удаляемый. – jimw

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