摘要:对于一个个刚刚接触前端的新手,天天听人讲闭包,听的那个高大尚,心中对各位技术大佬是那个的膜拜,于是做为前端菜鸟的我,就去了解了传说中的闭包。
对于一个个刚刚接触前端的新手,天天听人讲闭包,听的那个高大尚,心中对各位技术大佬是那个的膜拜,于是做为前端菜鸟的我,就去了解了传说中的闭包。
何为闭包?
通俗易懂的讲,就是可以调用函数内部的变量和方法
举例说明如下:
function test(){ var x = 1; var y = 2; function func1(){ x++; console.log("x:"+x); } function func2(){ y++; console.log("y:"+y); } func3 = function(){ console.log("x+y:"+(x+y)); } return { func1:func1 } } var obj1 = test(); obj1.func1();//输出x:2 obj1.func1();//输出x:3 func3();//输出x+y:5 var obj2 = test(); obj2.func1();//输出x:2 obj2.func1();//输出x:3 obj2.func1();//输出x:4 func3();//输出x+y:6 obj1.func1();//输出x:4 func3();//输出x+y:6
解析:你可以把test理解成一个对象,首先建立一个obj1对象,这个时候调用obj1.func1()时,test中的x会被累加,这个就是闭包的一个特点,就是外部可以改变函数内部的变量值,这里要记住一点,只有在test中return返回的函数在外部才能被调用,如果此时调用obj1.func2()会提示出错的,只有跟func1一样在return中返回才能被外部调用;func3可以理解为公有的函数,但是只有在声明完test之后才能被调用,因为func3第一次定义是在test中定义的,所有要先test()之后才能被调用;obj2是新建立的一个对象,此时的obj1和obj2两个对象是互不干扰的,各自叠加,这也是闭包的一个特性,可以用在以后建立多个计时器时使用闭包,事半功倍;这里要特别强调一下func3这个函数,第一个func3调用的是对象obj1中的func3,而当obj2新对象声明之后,func3调用的就是obj2中的func3了
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/84528.html
摘要:在内部,理所当然能访问到局部变量,但当作为的返回值赋给外的全局变量时,神奇的事情发生了在全局作用域中访问到了,这就是闭包。而闭包最神奇的地方就是能在一个函数外访问函数中的局部变量,把这些变量用闭包的形式放在函数中便能避免污染。 一、闭包是什么? 《JavaScript高级程序设计》中写道:闭包是指有权访问另一个函数作用域中的变量的函数,如果用下定义的观点看,这句话就是说闭包是函数,我...
本文不会过多讲解基础知识,更多说的是在使用useRef如何能摆脱 这个 闭包陷阱 ? react hooks 的闭包陷阱 基本每个开发员都有遇见,这是很令人抓狂的。 (以下react示范demo,均为react 16.8.3 版本) 列一个具体的场景: functionApp(){ const[count,setCount]=useState(1); useEffect(()=...
摘要:我们可以用普通函数内部嵌套匿名函数,形成一个闭包来使变量驻留在内存中。局部变量闭包为什么要将赋值给变量呢这里我们就要谈到匿名函数调用问题匿名函数如何调用还是上面的例子会将整个函数体打印出来这样才调用了函数内部的匿名函数看到这里。 闭包含义: 闭包是指有权访问另一个函数作用域中的变量的函数,创建闭包的常见的方式,就是在一个函数内部创建另一个函数,通过另一个函数访问这个函数的局部变量。 这...
阅读 3662·2021-10-18 13:34
阅读 2376·2021-08-11 11:15
阅读 1127·2019-08-30 15:44
阅读 668·2019-08-26 10:32
阅读 969·2019-08-26 10:13
阅读 2050·2019-08-23 18:36
阅读 1761·2019-08-23 18:35
阅读 504·2019-08-23 17:10