閉包
- 借助全局變量
!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的一個屬性,所以其它地方可以訪問到這個函數(shù),又由于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