封装对象/变量的细节
-立即执行函数使得 person 无法被外部访问
- 匿名函数可以访问/操作person
- window.growUp保存了匿名函数的地址
- 任何地方都可以访问window.growUp
- 任何地方都可以访问window.growUp,来操作person,但是不能直接访问person.
!function(){
var person = {
name:'jack',
age:18
}
}.call()
let a = person.age//Uncaught ReferenceError: person is not defined
person的作用域是立即执行函数内,所以会是not defined。使用闭包可以解决这个问题。
!function(){
var person = {
name:'jack',
age:18
}
window.growUp = function (){
return person.age +=1
}
window.personAge = function(){
return person.age
}
}.call()
window.growUp()
window.personAge()
另一种写法
var accessor = function(){
var person = {
name:'jack',
age:18
}
return function (){
return person.age += 1
}
}
var growAge = accessor.call()
growAge.call()
可以通过返回一个对象来返回多个接口
var accessor = function(){
var person = {
name:'jack',
age:18
}
return {
growAge:function (){
return person.age += 1
},
getAge:function (){
return person.age
}
}
}
网友评论