闭包与应用
一、闭包
1.闭包是什么
Javascript允许使用内部函数——函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包
2.闭包的优缺点
- 优点:在页面加载时闭包便已在内存中存在,因此调用的速度快;并且闭包的变量也会始终保存在内存中。
因为闭包的变量被赋予给了一个全局变量,因为只有局部变量在使用完后被销毁,所以闭包的变量不会被销毁
- 缺点:闭包会导致内存消耗过大,让页面性能降低;需要手动清空才能释放内存
2.闭包的表现形式
- 函数的嵌套
即在函数中声明新的函数,新声明的函数也被称嵌套函数 - 递归
一个函数有直接或间接调用了自己,这就是递归。递归的主要作用就是把原本复杂的问题,化为与相似但是更简单的问题。然后随着逐步的调用,问题也变得逐渐简单。
function f(a){
if(a>0){
return a+f(a-1);}
else{
return 0;}}
f(10)
上面这个代码意思为1、2、3、4……10的和,f()通过调用自己来实现计算;若是将以上代码分解,便可得:
f(10)=10+f(9)
f(9)=10+9+f(8)
f(8)=10+9+8+f(7)
...
f(1)=10+9+8+7+6+5+4+3+2+1+f(0)
//因为此时a已经不大于0了,所以f(0)的返回值为0
- 匿名函数
匿名函数简单来说就是没有名字的函数。因为js中不允许不命名函数,所以需要用一个括号将整个函数包起来:
(function (){
console.log("123");
};)
匿名函数只有在调用时,才会创建函数对象和作用域对象。调用完后立即释放,节省内存。适合做回调函数