大牛的讲解, 点击 我们首先需要有作用域的概念, 点击 那么什么是闭包? 官方的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。 广义上的闭包就是指一个变量在它自身作用域的被使用了,就叫发生了闭包。粗鲁地理解:闭包就是能够读取其它函数内部变量的函数。 在js中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单粗暴地理解成“定义在一个函数内部的函数”,即一个函数嵌套了另一个函数。 闭包是很多语言都具备的特性,在js中,闭包主要涉及到js的几个其他的特性: 作用域链,垃圾(内存)回收机制,函数嵌套...... 由于作用域的关系,我们在函数外部是无法直接访问到函数内部的变量的,但是函数内部可以把这个变量传给全局变量或者返回出来,这样外部作用域就可以访问函数内部作用域的变量了; 简单的说,闭包就是有权限访问另一个函数内部作用域的变量的函数; javascript具有自动垃圾回收机制,函数运行完之后,其内部的变量和数据会被销毁; 但是闭包就是在外部可以访问此函数内部作用域的变量,所以闭包的一个特点就是 script type ="text/javascript" > function outer(){ var a = 1 ; function inner(){ return a ++ ; }