javaScript 有两种作用域:全局作用域和函数作用域(es6加上块级作用域)。函数内部可以直接读取全局变量,但是函数外部无法读取函数内部声明的变量,闭包就是解决这个问题来的。
闭包是能够读取其他函数内部变量的函数。在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。闭包其实只是一个绑定了执行环境的函数。
闭包的最大用处有两个,一个是可以读取函数内部的变量,另一个就是让这些变量始终保持在内存中,即闭包可以使得它诞生环境一直存在。
function f1(){
var n =999
function f2(){
console.log(n)
}
return f2
}
var result=f1()
result()//999
作用1.能够读取函数内部变量
function createIncrementor(start) {
return function () {
return start++;
};
}
var inc = createIncrementor(5);
inc() // 5
inc() // 6
inc() // 7
作用2.闭包使得内部变量记住上一次调用时的结果
闭包可以看作是函数内部作用域的一个接口
执行上下文
JavaScript 标准把一段代码(包括函数),执行所需的的所有信息定义为:“执行上下文”。