我看闭包是为了能让外部得到函数内部定义的局部变量。那为什么一定要写成这样的形式呢?
function f1(){
var n=999;
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
就直接return 不行么?像这样
function f1(){
var n=123;
return n;
}
x=f1();
alert(x); ///123
这也是闭包么?
首先,第二个肯定不是闭包,闭包是一个函数。闭包一般用来隐藏或说保护我们的一些成员变量,通过闭包的形式返回出去一个能够操作我们保护起来的成员变量的函数。
function f1(){
var n=999;
function f2(){
alert(n++);
}
return f2;
}
var result=f1();
result(); // 999
result();// 1000
像上面这样,我们就能够访问f1的私有变量n,并且只能用每次+1的方式进行操作,一般来说闭包的使用像下面这样:
var car = (function(){
var _wheels = 4;
return {
setWheels : function(value){
if (value < _wheels) {
throw new Error('数值太小了!');
}
_wheels = value;
},
getWheels : function(){
return _wheels;
}
}
})();
我们给汽车轮子数量赋值的时候,是要调用set方法的,是不能随便赋值的。
如果像你第二张方式写的:
function f1(){
var obj={age : 10};
return obj;
}
obj=f1();
obj.age = -100;
https://segmentfault.com/q/1010000006178363