var myObject = (function (){
var value = 0;
return {
increment: function (inc){
value += typeof inc === 'number' ? inc : 1;
},
getValue: function (){
return value;
}
};
}());
请问一下这个闭包代码的最后的这个小括号有什么意义和作用,谢谢。
var myObject = (function (){
var value = 0;
return {
increment: function (inc){
value += typeof inc === 'number' ? inc : 1;
},
getValue: function (){
return value;
}
};
}());
请问一下这个闭包代码的最后的这个小括号有什么意义和作用,谢谢。
首先,你的疑问应该是对以下这种结构不熟悉:
(function (){
//TODO
}())
这种结构不叫闭包,她叫IIFE,中文也叫“立即执行函数表达式”,准确说和闭包无关。
在来谈闭包,你的示例中value
本来是这个“立即执行函数表达式”里的变量,为了能在这个函数表达式外部也能使用这个变量,函数表达式里返回了一个对象,该对象包含increment
和getValue
两个方法,通过这两个方法,函数表达式外部也可以操作value
的变化了,这种把内部一个属性通过函数暴露给外部环境使用的技巧,我们称之为闭包(原谅我的语句可能不够专业,你就简单理解下吧)。
如果需要专业解释的,最好还是google,闭包
代码可以缩略成以下内容:
var myObject = (
function() {
// do something
}()
);
可以看到,在首尾的()之间定义了一个函数,并且调用了该函数,并且返回了一个对象:
{
increment: function() {},
getValue: function() {}
}
赋值给了MyObject。
定义完成后自动执行,写法:
(function(){
//code
}())
(function(){
//code
})()
!function(){
//code
}()
13 回答12.6k 阅读
7 回答1.8k 阅读
3 回答1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
2 回答1.8k 阅读
2 回答1k 阅读✓ 已解决
大概类似于: