什么是闭包?
一、什么是闭包? 闭包就是能够读取其他函数内部变量的函数,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。 函数的嵌套形成闭包,闭包包括函数本身以及它的外部作用域。使用闭包可以形成独立的控件,延长变量的生命周期,保存中间状态值。 js语言中,函数内部可以直接读取函数外部的全局变量,而函数外部却无法读取函数内部的变量。 那么如何获取函数内部的变量呢,那就是在函数内部,在定义一个函数,这个函数可以拿到它上一级函数的变量,接着把这个函数当成返回值返回,就可以拿到定义在函数内部的变量 简单的说,作用域是针对变量的,比如我们创建一个函数 a1 ,函数里面又包了一 个子函数 a2 。此时就存在三个作用域: 全局作用域、 a1 作用域、 a2 作用域;即全局作用域包含了 a1 的作用域, a2 的作用 域包含了 a1 的作用域。 当 a1 在查找变量的时候会先从自身的作用域区查找,找不到再到上一级 a2 的作用域 查找,如果还没找到就到全局作用域区查找,这样就形成了一个作用域链。 理解闭包首先要理解, js 垃圾回收机制,也就是当一个函数被执行完后,其作用域会被 收回,如果形成了闭包,执行完后其作用域就不会被收回。 如果某个函数被他的父函数之外的一个变量引用,就会形成闭包。 闭包的作用,就是保存自己私有的变量,通过提供的接口(方法)给外部使用,但外部 不能直接访问该变量。