码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-06-28 13:09:26      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:必须   --   sdn   就是   战斗   土耳其   代码   test   UNC   

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

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),为什么要用它?在开发项目时什么地方用闭包?以及优点和缺点

标签:必须   --   sdn   就是   战斗   土耳其   代码   test   UNC   

原文地址:https://www.cnblogs.com/xiaoeshuang/p/13201998.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!