在下面的代码示例中,我理解备选方案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
};
})();
答案 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,该函数的返回值将被赋值给变量。
这种模式的关键目标之一通常是在闭包中隐藏一些状态。函数中定义的任何变量都将构成状态。这些变量可以被返回对象中的函数访问,但不能访问外部世界。