闭包的特性(只做了粗略整理)
一、概念
闭包是有权访问另一个函数作用域中变量的函数
自己的理解:它主要是利用windows才是匿名函数功能执行的环境的特性,通过在函数体内创建匿名函数,然后返回函数的方式,将原本本应该在函数体内执行完就销毁的变量保存了下来,这些被保存下来的变量,会一直存在,直到闭包不存在为止,当然也可以通过闭包名=null来释放掉闭包
二、闭包的特性
闭包只能取得包含函数中的任何变量的最后一个值
function arrFunc(){ var arr=[]; for(var i = 0;i<10;i++){ arr[i] = function(){ return i; }; } return arr; //输出10个10,原因是:arrFunc执行完后,其作用域被销毁,但它的变量对象仍保存在内存中,可以被匿名函数访问到 }
修改:
function arrFunc(){ var arr=[]; for(let i = 0;i<10;i++){ //let是块级作用域,i为0时,执行完毕就销毁了 arr[i] = function(){ return i; }; } return arr; }
3、闭包会造成的问题
内存常驻、内存泄漏
4、闭包的应用:
设置私有变量
5、实现add(1)(2)(3)
function sum(a){ return function(b){ return function(c){ return a+b+c; } } }