闭包作用

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保存

两者区别:实力是否共享特权方法

上一篇下一篇

猜你喜欢

热点阅读