试图理解javascript中对象的差异
在下面的代码示例中,我了解备选方案1和2的工作原理,但我试图了解第三个备选方案。这是什么类型的对象,为什么它在函数前面以括号开始:试图理解javascript中对象的差异,javascript,Javascript,在下面的代码示例中,我了解备选方案1和2的工作原理,但我试图了解第三个备选方案。这是什么类型的对象,为什么它在函数前面以括号开始:(函数,为什么它以双括号结束:()。只是好奇,想知道什么是什么和区别吗 备选案文1:(对象文字) 备选案文2:(功能对象) 备选案文3: var something = (function() { var settings = { rows : 10, cols : 3, number : 2 }; })(); 备选方
(函数
,为什么它以双括号结束:()
。只是好奇,想知道什么是什么和区别吗
备选案文1:(对象文字)
备选案文2:(功能对象)
备选案文3:
var something = (function() {
var settings = {
rows : 10,
cols : 3,
number : 2
};
})();
备选方案3将“something”变量设置为函数的返回值。()实际执行函数
我将使用MDN中的一些内容来展示闭包的好处:
在您的代码中,备选方案3将在某个变量中保留未定义的内容,原因是您的函数没有返回任何值 @Felix已经在上面发布了一个非常好的链接。这基本上是一个IIFE,它被立即调用,该函数的返回值将被分配给某个变量
这种模式的一个关键目标通常是在闭包中隐藏一些状态。函数中定义的任何变量都会产生这种状态。返回对象中的函数可以访问这些变量,但外部世界无法访问这些变量。请参见和。仅供参考,所有这些代码示例都有不同的功能,因此我不太确定具体是什么你想在这里进行比较。函数是一个对象,是吗?因此,如果你有一个对象
obj
,添加括号只是指定操作顺序。(obj)
只是引用obj
(obj)(调用obj
对象(如果它是函数).和函数声明是表达式,因此可以将它们放在括号中,表达式的值就是函数本身。将它们放在一起:(function(){})()
创建一个函数,然后调用它。上一个示例中围绕函数的括号是不必要的。有时需要,但这里不需要。第三个示例通常用于控制作用域,捕获闭包中的变量,并避免污染全局命名空间。好的,那么我想也应该有一个返回语句,返回这样的值me value!?我添加了一些关于使用第三种选择的更有用的解释。
var something = function(x,y) {
return x + y;
}
var something = (function() {
var settings = {
rows : 10,
cols : 3,
number : 2
};
})();
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 */