我正在试着阅读原型源代码。我已经讲到这一部分了(不幸的是,这段代码才刚刚开始)。
这()是什么意思?
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)
}
})(),
我指的是逗号前的最后一行?
发布于 2010-03-11 09:58:27
代码定义了一个匿名函数( (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,
...
这样做的一个缺点是,您会用一个在其他地方不会使用的函数和变量“污染您的名称空间”。第二个问题是,您不能在函数定义中使用任何局部作用域变量的值(匿名函数的行为类似于闭包)。
发布于 2010-03-11 10:07:44
(function () {})
创建一个匿名函数。
将()
添加到末尾将调用刚刚创建的函数。
在此特定函数的情况下,匿名函数向Browser
对象返回几个属性。因此,您最终得到了布尔值,例如,Browser.IE
、Browser.Opera
等。
发布于 2010-03-11 09:53:47
它调用刚刚声明的匿名函数,有效地导致“块”被计算。
https://stackoverflow.com/questions/2422026
复制相似问题