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