Что пустые скобки () после объявления функции в 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 ответа:
код определяет анонимную функцию (
(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 () {})
создает анонимную функцию.добавлять
()
до конца вызывает только что созданную функцию.в случае этой конкретной функции, анонимная функция возвращает несколько свойств к