閉包的作用:模仿塊作用域、保存變量青扔、封裝私有變量
(1)模仿塊作用域:通過構(gòu)建立即執(zhí)行函數(shù)
function create(count){
(function(){
for(var i=0;i<count;i++){
console.log(i)
}
})
alert(i)//報(bào)錯(cuò)锯七,上面函數(shù)執(zhí)行完链快,環(huán)境銷毀
}
通過特權(quán)方法來訪問(靜態(tài)變量)私有變量和(靜態(tài)方法)私有方法
在構(gòu)造函數(shù)內(nèi)部寫特權(quán)方法,為每個(gè)實(shí)例綁定特權(quán)方法使之可以訪問靜態(tài)方法和變量
function Create(){
var x=1
//create私有方法
function ss(){
return false
}
//特權(quán)方法
function Create(){
var x=1
//create私有方法
function ss(){
return false
}
//特權(quán)方法
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 每個(gè)實(shí)例都可以通過特權(quán)函數(shù)訪問到Create的私有方法和變量起胰,每個(gè)實(shí)例保存自己的引用不在原型上共享引用
在原型鏈上寫特權(quán)方法久又,所有實(shí)例共享特權(quán)方法
(function create(){
var x=1
//create私有方法
function ss(){
return false
}
//構(gòu)造函數(shù)
Person=function(){//Person不能用var聲明,不然在全局中訪問不到
}
//特權(quán)方法
Person.prototype.getX=function(){
x++
ss()
return x
}
})()//立即執(zhí)行函數(shù)效五,初始化Person構(gòu)造函數(shù)
var y=new Person()
var t=new Person()
console.log(y.getX())//2
console.log(t.getX())//3
y執(zhí)行g(shù)etX訪問引用的x并+1保存
t執(zhí)行g(shù)etX訪問引用的x并+1保存
兩者區(qū)別:實(shí)力是否共享特權(quán)方法