javascript闭包概念介绍

我心飞翔 分类:实例代码

闭包是javascript中一个比较重要的概念,如果说javascript有很多的入门标准的话,那么闭包就算做是其中的一个。

下面就介绍一下javascript闭包的相关概念,需要的朋友可以做一下参考。

在阅读本文之前,最好参阅以下几篇文章,如果已经掌握可以略过。

(1).javascript执行上下文详解一章节。

(2).javascript变量对象详解一章节。

(3).javascript 作用域和作用域链详解一章节。

在javascript中,函数function是一个对象,它既可以作为一个函数的参数,也可以作为一个函数的返回值。

上面的这个特点,在闭包中就会经常的被用到,下面先给出闭包的概念:

闭包就是能访问另一个函数作用域中变量的函数。

看如下代码实例:

function func() {
  var webName = "犀牛前端部落";
  function funA() {
    console.log(webName);
  }
  return funA;
}
var foo = func();
foo();

上面的代码就形成了一个闭包,函数funA被当做返回值返回,并赋值给变量foo。

当调用此返回函数的时候,依然可以输出func函数中声明的变量webName。

按照通常的道理,当一个函数执行完毕以后,它就会被销毁,那么它的变量就无法再访问了。

之所以能够进行访问,就是因为作用域链的原因导致的。

在进入上下文阶段,函数声明会存储在变量/活跃对象中(VO/AO),每一个函数都会有一个[[Scope]]指针,它指向是一个包含了所有上层变量对象的堆栈,[[Scope]]是在函数创建的时候保存起来的,并且以后永不会改变,直到被销毁。那么就以上面为例,虽然func() 执行完毕以后,它的内部的变量和作用域链被销毁,但是函数funcA由于被全局变量foo所引用,所以它不会被效果,它的作用域链也就不会被销毁,那么所指向的变量对象就依然存在,于是webName就是可访问的。

javascript闭包概念介绍,这样的场景在实际项目中还是用的比较多的,关于javascript闭包概念介绍就介绍到这了。

javascript闭包概念介绍属于前端实例代码,有关更多实例代码大家可以查看

回复

我来回复
  • 暂无回复内容