闭包(closure)
- 闭包的定义:当创建函数时,函数和外部状态(变量)的绑定就形成了闭包,所以每创建一个函数的同时会自动形成闭包。(这里的外部环境其实就是变量的作用域,如何判断作用域的范围,一般看包裹这个变量的{},如果没有{},那此变量就是全局变量了)
let a = 20; function outer() { let a = 10 function inner() { return a } return inner() } // 打印出的是函数outer内的变量a而不是外部变量a // 说明已经形成了闭包 console.log(outer())
我们知道创建函数以后都是自动形成闭包,也就是函数创建时就已经将函数外部的变量和函数内部的变量绑定在一起了,所以当你需要函数内部变量的值保持不变的时候就可以考虑在函数创建的同时,设置函数外部的变量,就如上面的例子,我希望inner函数内部的变量a不变,返回值永远是10,我们就可以在inner函数外部设置变量a为10,这样无论我们何时调用inner函数,返回的永远是10。
- 闭包的应用:
应用闭包无非是创建一个函数,而闭包的作用无非是创建函数时,将函数和此时的外部变量绑定在一起,这样不管我们什么时候调用函数,引用的变量都是创建函数时的外部变量。
(如有不同的见解,欢迎指出)