函数执行——闭包

2020-06-15  本文已影响0人  莎氏笔丫

什么是闭包?

当函数可以记住并访问所在的词法作用域时,就产生了闭包,即便这个函数是在当前词法作用域外执行。

在当前词法作用域内产生的闭包

function fn1(){
  var name='fn1';
  function fn2(){
    console.log(name)
  }
  fn2()
}
fn1()

在当前词法作用域外产生的闭包——fn1执行上下文已销毁,但fn3仍然能够访问到定义时的词法作用域

function fn1(){
  var name='fn1';
  function fn2(){
    console.log(name)
  }
  return fn2
}
var fn3 = fn1()
fn3()// 此时才调用fn2,也就是在词法作用域外执行

在当前词法作用域外产生的闭包——将函数作为参数

function fn1(){
  var name='fn1';
  function fn2(){
    console.log(name)
  }
  fn3(fn2)
}
function fn3(f){
  f()//在fn3函数中调用
}
fn1()

总结

在函数定义的时候就产生了词法作用域,在函数被调用的时候可以访问定义时词法作用域内的变量,无论函数是在词法作用域内部还是外部被调用,都产生了闭包。

上一篇 下一篇

猜你喜欢

热点阅读