试图理解javascript中对象的区别

时间:2014-04-10 21:40:23

标签: javascript

在下面的代码示例中,我理解备选方案1和2如何工作,但我试图理解第三种方案。这是什么类型的对象,为什么它在这个函数之前以括号开头:(function以及为什么它以这样的双括号结束:()。只是好奇,想知道什么是什么和不同?

备选方案1 :(对象文字)

var something = {
 rows: 12;
 cols: 6;
  };

备选方案2 :(功能对象)

var something = function(x,y) {
    return x + y;
}

备选方案3:??

var something = (function() {
    var settings = {
    rows : 10,
    cols : 3,
    number : 2
    };
    })();

2 个答案:

答案 0 :(得分:1)

备选方案3将“某事”变量设置为函数的返回值。 ()实际执行函数。

我将使用来自MDN的内容来展示闭包的好处:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures

var Counter = (function() {
  var privateCounter = 0;
  function changeBy(val) {
    privateCounter += val;
  }
  return {
    increment: function() {
      changeBy(1);
    },
    decrement: function() {
      changeBy(-1);
    },
    value: function() {
      return privateCounter;
    }
  };   
})();

alert(Counter.value()); /* Alerts 0 */
Counter.increment();
Counter.increment();
alert(Counter.value()); /* Alerts 2 */
Counter.decrement();
alert(Counter.value()); /* Alerts 1 */

答案 1 :(得分:0)

在你的代码中,替代3将在变量中保留undefined,原因是你的函数没有返回任何值。

@Felix上面已经发布了一个非常好的链接。这基本上是一个立即调用的IIFE,该函数的返回值将被赋值给变量。

这种模式的关键目标之一通常是在闭包中隐藏一些状态。函数中定义的任何变量都将构成状态。这些变量可以被返回对象中的函数访问,但不能访问外部世界。