javascript - 为什么有些js文件以(function() {

标签 javascript function

很简单,为什么有些 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/

相关文章:

javascript - 如何让html5播放器在没有源码的情况下播放

javascript - Chrome 扩展 : executeScript on tab

javascript - onclick 在第一次点击时不触发

c - 在C中解密文件的功能?

javascript - 使用javascript滚动侧边栏

javascript - 如何在流中使用 ES8 异步/等待?

function - Go 是否允许一个函数使用另一个函数作为参数?

javascript - 简单的页面过滤功能

javascript - 通过 html 按钮将对象传递给 javascript 中的函数

javascript - 将多个 jQuery 元素选择器传递给一个函数