网上有很多关于闭包的理解,自己也来总结一下,自己总结出来的才是比较理解的;
关于闭包的原理:
一句话,闭包的原理是利用作用域链;
<script>
var getName;
function Foo() {
getName = function(){ alert(1); };
return this;
}
Foo.getName = function() { alert(2); };
Foo.prototype.getName = function(){ alert(3); };
getName = function() { alert(4); };
function getName(){ alert(5); }
Foo.getName(); //2
getName(); //4
Foo().getName(); //1
getName(); //1
new Foo.getName();//2
new Foo().getName();//3
new new Foo().getName();//3
</script>
闭包的用途
个人感觉,闭包的用途有两个:
一 获取内部函数的变量;
<script>
function a () {
var b = 123;
return function () {
return b
}
}
var c = a();
console.log(c()); //123
</script>
二 保护内部变量不被修改;
<script>
function a() {
var a = 1,b = 2;
return {
getA:function () {
return a;
},
setA:function (b) {
a = b;
return a;
}
}
}
var c = a();
c.setA(232);
console.log(c.getA());
</script>
在理解面向对象和作用域链之后再去理解闭包会容易很多。