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
本来是这个“立即执行函数表达式”里的变量,为了能在这个函数表达式外部也能使用这个变量,函数表达式里返回了一个对象,该对象包含increment
和getValue
两个方法,通过这两个方法,函数表达式外部也可以操作value
的变化了,这种把内部一个属性通过函数暴露给外部环境使用的技巧,我们称之为闭包(原谅我的语句可能不够专业,你就简单理解下吧)。
如果需要专业解释的,最好还是google,闭包