概念:闭包是指有权访问另一个函数做用域中的变量的函数闭包
当访问一个变量时,解释器会首先在当前做用域查找标示符,若是没有找到,就去父做用域找,直到找到该变量的标示符或者不在父做用域中,这就是做用域链。函数
JavaScript中的词法做用域,在函数定义的时候就被建立。闭包函数因为引用来外层函数中的变量,因此闭包的做用域链上会保存外层函数的变量引用。即便外层函数被销毁,因为其词法做用域的变量还在被闭包所引用,因此这些变量就会继续保存在内存中不会被垃圾回收。对象
若是去查找一个普通对象的属性,可是在当前对象和其原型中都找不到时,会返回undefined;但查找的属性在做用域链中不存在的话就会抛出ReferenceError。ip