老师你好,es6为什么有块级作用域还用闭包?这个问题该怎么回答

来源:6-3 什么是闭包?闭包会用在哪里?

NBADOTA2

2020-11-08

输入正文

写回答

3回答

双越

2020-11-09

这是你面试遇到的问题吗?

这俩根本就没有关系。当年 ES5 有闭包,也不是因为没有块级作用域。

所以,这个问题感觉莫名其妙,不知所说。

0
1
NBADOTA2
这是我看一个学长面经时发现的,是钉钉的一面的前几个问题
2020-11-09
共1条回复

_zion_

2020-12-11

函数变量应尽量私有化。从外部作用域中操作函数的私有变量,需要使用闭包。如果有了块作用域,理论上可以把私有变量和操作函数放在一个块中,这样也不污染外部作用域,但是明显不靠谱。。

1. 如果要修改从外部文件引入的js函数内的变量,没办法把外部函数和你当前的操作函数放在一个块作用域中。

2. 函数每次执行的时候会创建自己的作用域,通过闭包,可以保证函数作用域的变量对象不被销毁。进而可以拥有多个不同的私有变量,局部作用域里面的变量就那一个,值改变了,用到这个值的地方都会受影响。。

我感觉还是解释的有点奇怪,,希望我面试的时候不会有这种神奇的问题。。

    let Foo = function () {
      let _name = 'Frank'
      this.getName = function () {
        console.log(_name)
        return _name
      }
      this.setName = function (str) {
        _name = str
      }
    }
    // 全局作用域不能访问_name变量
    let foo1 = new Foo()
    foo1.setName('Shawn')
    let foo2 = new Foo()
    foo2.setName('Givenchy')
    foo1.getName()
    foo2.getName()
    // 打印 Shawn Givenchy
// {}外面不能访问_name变量
{
      let _name = 'Frank'
      let Foo = function () {
        this.getName = function () {
          console.log(_name)
          return _name
        }
        this.setName = function (str) {
          _name = str
        }
      }
      let foo1 = new Foo()
      foo1.setName('Shawn')
      let foo2 = new Foo()
      foo2.setName('Givenchy')
      foo1.getName()
      foo2.getName()
      // 打印 Givenchy Givenchy
    }


1
0

Ericlay

2021-04-17

你自己手写一个定时器就知道为什么用闭包了

0
0

一天时间高效准备前端技术一面 匹配大厂面试要求

针对时下面试高频考点,帮助新人js面试快速通关

4694 学习 · 1681 问题

查看课程