I’m trying to read the Prototype source. I’ve come to this part.(Unfortunately, this snippet is in the beginnning).
What does this () mean?
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)
}
})(),
I am referring to the last line before the comma?
The code is defining an anonymous function (the
(function (){ ... })bit) and then calling it (with no arguments). It then assigns the value to theBrowserproperty of the object that is presumably being defined outside of your code snippet.You could also define the function somewhere:
and then call it:
and then assign the value:
One downside with doing it that way is that you “pollute your namespace” with a function and a variable that you won’t use anywhere else. The second issue is that you can’t use the value of any locally-scoped variables in your function definition (the anonymous function behaves as a closure).