这种结构可以叫闭包吗?

  function Student(n) {
    let name = n;
    this.say = function () {
      console.log(name)
    }
  }
  let xiaoming = new Student('xiaoming')
  let xiaohong = new Student('xiaohong')
  xiaoming.say()
  xiaohong.say()
  function Student(n) {
    this.name = n;
    this.say = function () {
      console.log(this.name)
    }
  }
  let xiaoming = new Student('xiaoming')
  let xiaohong = new Student('xiaohong')
  xiaoming.say()
  xiaohong.say()

这两行代码输出都是:
xiaoming
xiaohong
那么他们的区别是什么? let name 这个变量存储在哪?
第一个代码段是因为闭包才使得输出不同吗?

阅读 1.4k
2 个回答
  1. 以上两段代码的区别:第一段代码中name是私有的外界无法直接访问。 第二段代码中name是Public的,外界可直接使用 xiaoming.name="xxxx"的形式修改。
  2. 这两段代码输出不同姓名,与闭包机制一点关系都没有,只是两个不同的实例,输出的name当然不同。
  3. 第一段代码确实是一种闭包:即通过public的方法来访问私有变量。

第一个的name是内部变量,一般只能在内部使用,只能通过调用say方法间接获取
第二个的name是成员变量,可以外部调用 xiaoming.name获取
let name在实例化的时候开辟了一段内存空间,然后储存在里面
第一段的闭包是为了间接获取内部变量,第二段就有些多此一举了,可以直接用xiaoming.name

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题