每天3小时学前端之JS-第16天-闭包1

243 阅读1分钟

此系列体验视频教程

点击观看:哔哩哔哩

闭包

闭包产生的原因

  • 函数内部可以直接读取全局变量。
  • 函数外部无法读取函数内部声明的布局变量
  • 需要有一种办法使得我们可以让我们能在函数外部读取函数内部的局部变量

闭包形成所需要具备的条件

  1. 嵌套函数
  2. 内部函数要使用外部函数的变量(函数)
  3. 要在外部函数中使用(返回)内部函数
  4. 要调用外部函数(要执行内部函数的声明),内部函数并不是必须要调用
function fn1() {
  var a = 1
  function fn2() {
    return a
  }
  console.dir(fn2)
  return fn2
}
var f = fn1()
// console.log(f());

调试查看闭包

function fn1() {
  var a 
  a = 1
  function fn2() {
    return a
  }
  return fn2
}
var f = fn1()
console.log(f());

闭包形成的原理

function fn1() {
  var step = 0
  function fn2() { // fn2使用了fn1的上下文对象的属性step,所以step就一直不能被释放。
    // 闭包是一个对象,里面的属性是:内部函数引用的外部函数的变量(函数)
    console.log(++step);
    // 闭包的个数:看创建(外部函数的调用)了几个fn2这样的函数(引用了外部函数的变量的函数),跟调用内部函数的次数是无关的
  }
  console.dir(fn2)
  return fn2
}
var f = fn1()
f()
f()
f()