闭包是指有权访问另一个函数作用域中变量的函数,创建闭包最常见的方式就是一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用域链,将函数内部的变量和方法传递到外部。
闭包的特性:
1.函数内嵌套函数
2.内部函数可以引用外层的参数和变量
3.参数和变量不会被垃圾回收机制回收
作用域链 : 首先在js中有作用域的概念,指的是一个变量的活动范围,分为全局作用域和局部作用域,全局作用域指的是window,局部作用域指的是每一个函数内部,在作用域中查找一个变量首先在自己当前作用域内查找找不到向上级查找,逐层向上找到window为止,找不到会抛出一个undefined错误,这个查找的过程就是作用域。作用域链需要注意的问题是变量提升,当一个变量在定义之前使用就会得到一个undefined值,在es6则不会出现这个问题,es6不允许在定义之前使用。
网友评论