闭包是一类特殊的高阶函数,它是由函数和其周围状态(词法环境)的引用捆绑在一起形成的,它的表现就是可以在一个作用域中调用一个函数内部的函数并访问到该函数的作用域中的成员。
闭包形成的原因是,当一个函数执行完成以后,其内部的成员就会被释放掉。如果这个函数返回了一个函数,并且在这个返回的函数内部又访问了其外部函数中的成员变量,这就形成了闭包。即外部对内部成员有引用,就造成该成员不能被释放掉。
闭包有两个特点:1、在一个作用域中可以去调用另一个函数的内部函数;2、当我们调用这个内部函数的时候可以访问到这个内部函数外部函数的内部成员。
闭包的核心作用:把被调用函数内部成员的作用范围进行了延长。
闭包的本质:函数在执行的时候会放到一个执行栈call stack上,当函数执行完毕之后会从执行栈call stack上移除,但是堆上的作用域scope成员因为被外部引用不能被释放,因此内部函数依然可以访问到外部函数成员。
总结:关于闭包的概念就是我们从一个作用域中去访问一个函数内部的函数,并且在这个内部函数中可以访问到外部函数中的成员。闭包好处就是延长了外部函数它内部变量的作用范围。
function makeSalary (base) {
return function (performance) {
return base + performance
}
}
const getSalaryLevel1 = makeSalary(12000)
const getSalaryLevel5 = makeSalary(15000)
console.log(getSalaryLevel1(2000))
console.log(getSalaryLevel2(3000))