What do empty parentheses () after a function declaration do in javascript?
本问题已经有最佳答案,请猛点这里访问。
我正在尝试阅读Prototype源代码。 我来到这一部分。(不幸的是,这个片段在开头)。
这是什么意思?
1 2 3 4 5 6 7 8 9 10 11 | 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) } })(), |
我指的是逗号前的最后一行?
代码定义了一个匿名函数(
您还可以在某处定义函数:
1 2 3 4 5 6 7 8 9 10 | 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) } |
然后调用它:
1 | var foo = myFunction(); |
然后分配值:
1 2 3 | ... Browser: foo, ... |
这样做的一个缺点是你用一个你不会在其他任何地方使用的函数和变量来"污染你的命名空间"。第二个问题是您不能在函数定义中使用任何本地范围的变量的值(匿名函数表现为闭包)。
将
对于此特定函数,匿名函数会向
它调用刚刚声明的匿名函数,有效地导致"块"被评估。
这是一个简单的函数调用,除了调用匿名函数文字外,与