这些双括号在JS中做什么

What do these double parentheses do in JS?

本文关键字:JS 什么      更新时间:2023-09-26

我正在读《secrets of the js ninja》一书,经常看到这样的代码

(function(){
  something here;
  })();

为什么我们需要把函数括在括号里,为什么我们要在括号后面再加一对括号?

它是一个自调用函数,在脚本完成加载时调用它自己。您可以在不带参数的情况下调用它,也可以向它添加参数,如windowdocument

您使用它的方式就像jQuery使用它一样:

(function( window, undefined ) {
    // jQuery code
})(window);

做同样事情的(几乎)替代语法:

! function( window, undefined ){
    // some code…
}(window);

更多信息,请访问:http://sarfraznawaz.wordpress.com/2012/01/26/javascript-self-invoking-functions/

(function(){
  alert('hello');
})();

虽然它是一个函数,但它是自动调用的,所以你不能/不能手动调用

这些对于类似的for循环非常有用

这将失败,因为我将等于9后5秒

for(var i = 0; i < 10; i++) {
   window.setTimeout(function(){
      console.log(i);
   }, 5000)
}

所以你可以做这个

for(var i = 0; i < 10; i++) {
   (function(a){
      window.setTimeout(function(){
         console.log(a);
      }, 5000)
   })(i);
}

也有利于创建像这样的"私人"作用域

(function(){
   var test = 'hello';
   console.log( test ); // 'hello'
}());
   console.log( test ); // 'undefined'

最后一组括号会使函数立即执行。创建和执行函数时,不会将其分配到任何位置。将代码封装在这样的函数中的原因是为了封装代码。举个例子:

var myVar = 'whatever';
function shout() { alert(myVar); }

这里,myVarshout刚刚成为全局变量。您可以打开控制台并键入window.myVarwindow.shout,就可以访问和更改这些变量。通过将其封装在函数中,这些变量对外部函数保持本地:

(function() {
    var myVar = 'whatever';
    function shout() { alert(myVar); }
})();

CCD_ 9和CCD_。仅存在于该函数内部。

该模式还用于围绕局部变量创建闭包。请参阅循环中的JavaScript闭包——一个简单的实用示例。

自调用函数,基本上它调用自己strightaway。

通常用于传递像jQuery这样的变量,以确保$是真正的jQuery对象!

(function($){
    // $ now is equal to jQuery
})(jQuery);

它运行您刚刚创建的函数。这样做的原因是它将您编写的所有代码都包含在一个新的范围内。这意味着当您定义varsfunctions时,它们将保留在您刚刚创建的function()的范围内。

简而言之,它封装了代码。