Подтвердить что ты не робот

Что делать с пустыми круглыми скобками() после объявления функции в javascript?

Я пытаюсь прочитать источник Prototype. Я пришел к этой части. (К сожалению, этот фрагмент находится в начале).

Что означает это()?

  Browser: (function(){
    var ua = navigator.userAgent;
    var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
    return {
      IE:             !!window.attachEvent && !isOpera,
      Opera:          isOpera,
      WebKit:         ua.indexOf('AppleWebKit/') > -1,
      Gecko:          ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1,
      MobileSafari:   /Apple.*Mobile.*Safari/.test(ua)
    }
  })(),

Я имею в виду последнюю строку перед запятой?

4b9b3361

Ответ 1

Код определяет анонимную функцию (бит (function (){ ... })), а затем вызывает ее (без аргументов). Затем он присваивает значение свойству Browser объекта, который предположительно определяется вне фрагмента кода.

Вы также можете определить функцию где-то:

function myFunction() {
    var ua = navigator.userAgent;
    var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
    return {
      IE:             !!window.attachEvent && !isOpera,
      Opera:          isOpera,
      WebKit:         ua.indexOf('AppleWebKit/') > -1,
      Gecko:          ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1,
      MobileSafari:   /Apple.*Mobile.*Safari/.test(ua)
}

а затем назовите его:

var foo = myFunction();

а затем присвойте значение:

...
Browser: foo,
...

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

Ответ 2

(function () {}) создает анонимную функцию.

Добавление () в конец вызывает функцию, которая была только что создана.

В случае этой конкретной функции анонимная функция возвращает несколько свойств объекту Browser. Таким образом, вы получаете логические значения для, например, Browser.IE, Browser.Opera и т.д.

Ответ 3

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

Ответ 4

Это простой вызов функции, отличный от foo(), за исключением того, что он вызывает литерал анонимной функции, результат функции присваивается свойству Browser.