首页 > 这个闭包中的尾巴上的括号是什么意思?

这个闭包中的尾巴上的括号是什么意思?

var myObject = (function (){
  var value = 0;
  return {
    increment: function (inc){
      value += typeof inc === 'number' ? inc : 1;
    },
    getValue: function (){
      return value;
    }
  };
}());

大概类似于:

var fn = function (){
  var value = 0;
  return {
    increment: function (inc){
      value += typeof inc === 'number' ? inc : 1;
    },
    getValue: function (){
      return value;
    }
  };
};
var myObject =fn();

//  简化一点就是 :
var myObject = (function fn(){}()) // myObject就是fn()的返回值,也就是return 后边那个对象

代码可以缩略成以下内容:

var myObject = (
  function() { 
  // do something
  }()
);

可以看到,在首尾的()之间定义了一个函数,并且调用了该函数,并且返回了一个对象:

{
  increment: function() {},
  getValue: function() {}
}

赋值给了MyObject。


这是个借助了闭包的单体,小括号的作用是为了立即执行这个匿名函数,即IIFE


表示立即执行该函数,楼主其实就是想调用里面return后的对象方法, 如果不执行,单体模式,并不能够发挥它的作用啊。


定义完成后自动执行,写法:

(function(){
//code
}())

(function(){
//code
})()

!function(){
//code
}()

首先,你的疑问应该是对以下这种结构不熟悉:

(function (){
    //TODO
}())

这种结构不叫闭包,她叫IIFE,中文也叫“立即执行函数表达式”,准确说和闭包无关。

在来谈闭包,你的示例中value本来是这个“立即执行函数表达式”里的变量,为了能在这个函数表达式外部也能使用这个变量,函数表达式里返回了一个对象,该对象包含incrementgetValue两个方法,通过这两个方法,函数表达式外部也可以操作value的变化了,这种把内部一个属性通过函数暴露给外部环境使用的技巧,我们称之为闭包(原谅我的语句可能不够专业,你就简单理解下吧)。

如果需要专业解释的,最好还是google,闭包

【热门文章】
【热门文章】