1.可以在函数的外部访问到函数内部的局部变量 。
2.让这些变量始终保存在内存中,不会随着函的结束而自动销毁。
<script>
function a() {
function b() {
var bb = 234;
console.log(aaa); //123
}
var aaa = 123;
return b;
}
var demo = a();
demo();
// 闭包:函数中会出现的一个现象,将函数(a)内部的函数(b)返回到函数(a)外部去
// 形成闭包后,函数外部可以使用函数内部的变量、数据。
// 闭包一旦形成,作用域不会被释放,一直占用内存,内存泄漏(被占用)。
</script>
<script>
function sum() {
var count = 0;
return function() { // 函数是在sum中被定义的
count++;
return count;
}
}
var demo = sum();
console.log(demo()); //1
console.log(demo()); //2
console.log(demo()); //3
console.log(demo()); //4
console.log(demo()); //5
console.log(demo()); //6
//在形成闭包后,作用域一直存在不被销毁,返回值会不断增加
</script>
通俗的来讲就是别人家有某个东西,你想拿 但是权限不够(不打死你才怪),但是你可以跟 家中的小孩子套近乎,通过他拿到。
这个家就是局部作用域,外部无法访问内部变量,孩子是返回对象,对家里的东西才有访问权,借助孩子你才能间接访问内部变量。