JS基础篇:8、闭包

183 阅读1分钟

作用域链

作用域分为全局作用域和局部作用域,当声明了一个函数,函数内部就会形成一个局部作用域。  一个局部作用域肯定有上级作用域。当访问一个变量时,解释器会首先在当前作用域查找,如果没有找到,就去上级作用域找,直到找到该变量,不然一直找到全局作用域,这个叫做作用域链的查找机制。作用域中的函数都会含有上级的作用域,形成作用域链。

什么是闭包?

  • 闭包是指有权访问另外一个函数作用域中的变量的函数.可以理解为(能够读取其他函数内部变量的函数)
  • 格式:嵌套的函数,内部函数使用外部函数的变量,外部函数返回内部函数。
// 经典闭包
function fn () {
  let x = 1;
  return function add() {
     return x;
  }
}
var test = fn();
console.log(test()); // 2

优缺点

优点:可以读取函数内部变量。

缺点:可以造成变量贮存,滥用闭包容易造成内存泄露,影响页面性能。