闭包作用
2020-09-01 本文已影响0人
EO_eaf6
闭包的作用:模仿块作用域、保存变量、封装私有变量
(1)模仿块作用域:通过构建立即执行函数
function create(count){
(function(){
for(var i=0;i<count;i++){
console.log(i)
}
})
alert(i)//报错,上面函数执行完,环境销毁
}
通过特权方法来访问(静态变量)私有变量和(静态方法)私有方法
在构造函数内部写特权方法,为每个实例绑定特权方法使之可以访问静态方法和变量
function Create(){
var x=1
//create私有方法
function ss(){
return false
}
//特权方法
function Create(){
var x=1
//create私有方法
function ss(){
return false
}
//特权方法
this.getX=function(){
x++
ss()
return x
}
}
var y=new Create()
var t=new Create()
console.log(y.getX())//2
console.log(t.getX())//2 每个实例都可以通过特权函数访问到Create的私有方法和变量,每个实例保存自己的引用不在原型上共享引用
在原型链上写特权方法,所有实例共享特权方法
(function create(){
var x=1
//create私有方法
function ss(){
return false
}
//构造函数
Person=function(){//Person不能用var声明,不然在全局中访问不到
}
//特权方法
Person.prototype.getX=function(){
x++
ss()
return x
}
})()//立即执行函数,初始化Person构造函数
var y=new Person()
var t=new Person()
console.log(y.getX())//2
console.log(t.getX())//3
y执行getX访问引用的x并+1保存
t执行getX访问引用的x并+1保存
两者区别:实力是否共享特权方法