Что пустые скобки () после объявления функции в JavaScript? [дубликат]


этот вопрос уже есть ответ здесь:

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

что это значит ()?

  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)
    }
  })(),

Я ссылаясь на последнюю строку перед запятой?

4 54

4 ответа:

код определяет анонимную функцию ((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,
...

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

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

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

в случае этой конкретной функции, анонимная функция возвращает несколько свойств к

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

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