老师你好,es6为什么有块级作用域还用闭包?这个问题该怎么回答
来源:6-3 什么是闭包?闭包会用在哪里?

NBADOTA2
2020-11-08
输入正文
写回答
3回答
-
这是你面试遇到的问题吗?
这俩根本就没有关系。当年 ES5 有闭包,也不是因为没有块级作用域。
所以,这个问题感觉莫名其妙,不知所说。
012020-11-09 -
_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 }
10 -
Ericlay
2021-04-17
你自己手写一个定时器就知道为什么用闭包了
00
相似问题