很简单,为什么有些 js 文件(例如 Ember 或 JQuery.js)以 (function() {...})();
开头?
最佳答案
(function() {/* code here */})()
形式的代码被称为“立即调用的函数表达式”。它经常用于设置闭包,因此您可以在不污染全局范围的情况下定义变量。由于这个原因,您可以在 Ember、jQuery 和几乎所有其他“插件”中找到它。污染全局范围通常不是一个好主意,但是对于必须在所有站点上工作的插件,确保它不会意外覆盖站点创建者正在使用的变量尤为重要。
当然还有其他用途。例如,它可用于“锚定”一个迭代变量,如下所示:
for( i=0; i<links.length; i++) {
(function(i) {
links[i].onclick = function() {alert(i);};
})(i);
}
// without the IIFE, all links would alert the value of links.length instead.
还有一些我偶尔会使用 IIFE 的情况,大多数人可能会责备我,例如“即时”计算:
if( (function() {
var party=document.getElementById('party').children, l=party.length, i, r=0;
for( i=0; i<l; i++) if( party[i].children.length > 0) r++;
return r;
})() == 6) {
// your Party is full
}
如果在跳转到 if
语句之前计算上面的内容会好得多,所以...不要像我在这上面做的那样!
关于javascript - 为什么有些js文件以(function() {,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19296917/