了解闭包吗?
这个问题其实在问:
- 闭包是什么?
- 闭包有什么作用?
闭包是什么
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()) //cxk
cxk.setName('jntm')
console.log(cxk.getName()) //jntm
console.log(name) //name is not defined
函数体内的 var name = 'cxk'
只有 getName
和 setName
两个函数能够拜访,内部无法访问,绝对于将变量私有化。