JS闭包的理解

闭包

1、JS中函数是一等公民

1.1在JavaScript中,函数是非常重要的,并且是一等公民;

函数可以作为另外一个函数的参数,也可以作为另外一个函数的返回值来使用;

1.2高阶函数: 当一个函数如果接收另外一个函数作为参数,或者该函数会返回另外一个函数作为返回值时, 那么这个函数就称之为是一个高阶函数。

1.3函数和方法的区别:

函数function: 独立的function, 那么称之为是一个函数

function foo() {}

方法method: 当我们的一个函数属于某一个对象时, 我们称这个函数是这个对象的方法

var obj = {
  foo: function() {}
}
obj.foo()

2、JS中的闭包

2.1定义

①从广义的角度来说:JavaScript中的函数都是闭包;

②从严格角度上(狭义的角度):闭包由两部分组成:函数本身+这个函数可以访问的自由变量

③自由变量:在自身函数里面可以访问的上层作用域里的某些变量

总结: 一个普通的函数function,如果它可以访问外层作用域的自由变量,那么这个函数就是一个闭包;

2.2闭包的执行过程

function foo() {
  var name = "foo"
  var age = 18

  function bar() {
    console.log(name)
    console.log(age)
  }
  return bar
}

var fn = foo()
fn()

上述代码执行过程图(内存图):

2.3闭包的内存泄露

闭包会造成内存泄露,其实就是在引用链中的所有对象都是无法释放的

JS引擎(V8引擎对内存的优化):AO对象(动态对象(Activation Object(AO)))不会被销毁时,但闭包里面未使用到的属性会被释放)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值