了解闭包吗?
这个问题其实在问:
- 闭包是什么?
- 闭包有什么作用?
闭包是什么
MDN的解释:闭包是函数和申明该函数的词法环境的组合。
依照我的了解就是:闭包 =『函数』和『函数体内可拜访的变量总和』
举个简略的例子:
(function() { var a = 1; function add() { var b = 2 var sum = b + a console.log(sum); // 3 } add()})()
add
函数自身,以及其外部可拜访的变量,即 a = 1
,这两个组合在一起就被称为闭包,仅此而已。
闭包的作用
闭包最大的作用就是暗藏变量,闭包的一大个性就是外部函数总是能够拜访其所在的内部函数中申明的参数和变量,即便在其内部函数被返回(寿命终结)了之后
基于此个性,JavaScript能够实现公有变量、特权变量、贮存变量等
咱们就以公有变量举例,公有变量的实现办法很多,有靠约定的(变量名前加_),有靠Proxy代理的,也有靠Symbol这种新数据类型的。
然而真正宽泛风行的其实是应用闭包。
function Person(){ var name = 'cxk'; this.getName = function(){ return name; } this.setName = function(value){ name = value; }}const cxk = new Person()console.log(cxk.getName()) //cxkcxk.setName('jntm')console.log(cxk.getName()) //jntmconsole.log(name) //name is not defined
函数体内的 var name = 'cxk'
只有 getName
和 setName
两个函数能够拜访,内部无法访问,绝对于将变量私有化。