JS闭包
闭包的四个概念,执行环境,活动对象,作用域,作用域链
当定义一个函数的时候,这个函数的作用域就确定了,整个函数体就是执行环境,如果该函数是全局函数,那么它的作用域链就只要window对象,当调用函数的时候,会创建一个活动对象,arguments属性添加在活动对象上,当子函数(嵌套函数)访问一个变量时,先从自身的活动对象上找,没有再找父函数的活动对象,再找window对象,都没有就返回undefined。
闭包的应用场景,1、在内存中保存一个变量,当一个函数有子函数的时候(创建了闭包),这个函数里的变量的值不会重新开始,而是保存最后一次运算之后的值。
2、通过保护变量的安全实现js私有属性和私有方法(不能被外部访问)