什么是闭包(closure),为什么要用它?在开发项目时什么地方用闭包?以及优点和缺点

Posted xiaoeshuang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是闭包(closure),为什么要用它?在开发项目时什么地方用闭包?以及优点和缺点相关的知识,希望对你有一定的参考价值。

一.什么是闭包?
我看看了很多的解释,看的人云里雾里的。最后总结了一下,闭包其实就代码编写时呈现的一种特定形式,就是在一个函数中定义并返回了另外一个函数,在这个内部定义的函数中可以访问外面的函数定义的变量,但是外面函数不能访问内部函数定义的变量。

function test1(){
var a = "abc";
var b = "efg";
var test2 = function(a1,b1){
console.log("a1:"+a1+"--b1:"+b1);
}
return test2(a,b);
}

闭包其实和js的作用域是紧紧相关联的,要想了解闭包还必须首先了解一下js的作用域。
这里我们先不考虑ES6,我们只考虑ES5及以下。

作用域?
作用域其实就是变量或或属性能够起作用的范围,就像我们常说的领空一样,我们国家的战斗机一般只能在我们自己的领空进行巡逻,训练啥的,你如果跑到其他国家的领空去了你这就叫入侵了,这是要出事情的,轻者就像我们外交部常说那样“我们抗议,我们严重抗议,我们坚决反对”然后没了;重者就像土耳其直接将俄罗是的战机干下来一样。当然美帝是一个Bug,不考虑。言归正传,js的作用域分为局部作用域和全局作用域。
局部作用域又叫函数作用域,他只在函数内部生效,定义在该作用域内的变量或属性,就只能在该函数内可以访问。其他的函数想访问,对不起,此领空不开放。

var age="10";
function person(){
var name = "wang_yangyang";
}

上面代码中person函数在执行的时候就形成了一个局部作用域,在该作用域中name就是局部变量只有在person中才能访问到,你在person外面是访问不到的。另外就是全局作用域了,顾名思义就是在哪里都可以访问的,由一种普天之下莫非王土的赶脚。
类似上面代码中age说在的作用域就是全局作用域,你在所有全局作用域定义的函数中都可以访问


原作者链接:https://blog.csdn.net/wang839305939/java/article/details/73065099

以上是关于什么是闭包(closure),为什么要用它?在开发项目时什么地方用闭包?以及优点和缺点的主要内容,如果未能解决你的问题,请参考以下文章

什么是闭包(closure),为什么要用它?

前端面试题js和jQuery

我所理解的JavaScript闭包

什么是外函数,什么是内函数?闭包(Closure)是什么?说说你对闭包(Closure)的理解?

JS中的闭包(closure)

Swift语言精要-闭包(Closure)