关于javascript的闭包,牵涉作用域,因为js为词法作用域和对象调用作用域。
闭包就相当于,把一个私用属性类持久化的概念。
当一个嵌套函数被一个全局变量持有,而嵌套函数又引用了外围函数,这意味着外围函数的所有属性包括私有属性都被存储在了这个全局变量上,那么从某种程度上来说,实现了该外围函数的属性的持久化。而这个外围函数的属性不能被外部改变,只能通过嵌套函数访问。
其实相当于new 了一个对象给全局变量。
简单的例子,使用匿名函数来处理。
var uniqueId = (function(){
var id = 0;
return function(){
return id++;
}
})();//只有立即执行才是将嵌套函数的持有对象为uniqueId。
类似,将匿名函数作为作为一个新建对象给到了uniqueId,但是uniqueId的函数体为嵌套函数的函数体。跟新建对象有一定的区别。