闭包
- 借助全局变量
!function(){
var user = {
name:'chiang',
age:21
}
window.uesrGetter = {
nameGetter:function(){
return user.name //拷贝了name的值
},
ageGetter:function(){
return user.age
},
old:function(){
user.age += 1
}
}
}()
!function(){
window.userGetter.nameGetter()
window.userGetter.ageGetter()
window.userGetter.old()
}()
由于userGetter作为window的一个属性,所以其它地方可以访问到这个函数,又由于userGetter可以访问到user的属性,所以相当在于其他地方间接访问了user,但是不能让别的作用于修改user。
- 不借助全局变量
!function(){
function olderMaker(){
var user = {
name:'chiang',
age:21
}
return function(){
user.age += 1
}
return older = olderMaker()
older.call()
}
}()
olderMaker为了让user有一个独立的作用域,return function是为了让其它作用域访问user