JavaScript中的闭包
2019-06-18 11:54
102 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41665697/article/details/92653685
1.什么是闭包?
一个函数嵌套另一个函数,内部函数引用了外部函数的变量,并且当外部函数调用的时候就形成了闭包。
[code]function fn (){ var a = 1; function fn1(){ console.log(a) } return fn1; } var f = fn(); f() //或者 function fn () { var a = 1; return function(){ console.log(a) } } var f = fn(); f() //或者 function show (msg,time) { setTimeout(function(){ console.log(msg) },time) } show("closure",2000)
我们可以使用谷歌的调试工具,debug查看一下
2.闭包的作用
(1)使函数内部的变量在函数执行完后没有消失,仍然存活在内存中,延长了局部变量的生命周期。在一个正常的函数内部,声明一个变量,当这个函数执行完之后,内部的变量就会消失。
(2)让函数外部可以操作(读写)到函数内部的数据(变量、函数)
3.闭包的生命周期
[code]function fn(){ var a = 1; function fn2(){ a++; console.log(a) } return fn2 } var f = fn() f(); f(); f = null;
在上面a++的这个例子当中,闭包是在fn2定义的时候就形成(不是在调用fn2)
那闭包在什么时候死亡呢,当变量f赋值为null的时候,切断了f指向内存中的联系,也就是地址值,成为了垃圾对象。
4.闭包的应用
定义js模块
具有特定功能的js文件
数据和功能都封装在一个函数内部(私有的)
向外暴露一个对象或者函数,然后可以在外部调用
[code]//第一种方式 (function(window){ var msg ="i am msg" function doUp(){ console.log("doUp "+msg.toUpperCase()) } function doLower(){ console.log("doLower " +msg.toLowerCase()) } //暴露方法 window.module={ doUp:doUp, doLower:doLower } })(window) //调用函数内部的方法 module.doUp() // doUp I AM MSG module.doLower() // doLower i am msg //第二种方式 function module (){ var msg ="i am msg" function doUp(){ console.log("doUp "+msg.toUpperCase()) } function doLower(){ console.log("doLower " +msg.toLowerCase()) } return { doUp:doUp, doLower:doLower } } var f = module() f.doUp() f.doLower()
组成部分:
1.自调用的匿名函数
2.内部有数据 方法 还有向外暴露的对象
3.通过对象来调用
4.为什么自调用的匿名函数要传window这参数呢,不传window程序也是可以运行的,传了window是为了代码压缩。
5.推荐第一种方式
这篇写的能明白吗?哪里不明白,留言看到修改。。。
相关文章推荐
- JavaScript闭包--特权方法
- 解释 JavaScript 的作用域和闭包
- JavaScript之闭包详解
- 分析_JavaScript_中的_“闭包”
- JavaScript中的匿名函数及函数的闭包
- javascript_closure闭包--1
- 深入理解javascript原型和闭包(1)——一切都是对象
- javascript的闭包
- 深入理解javascript原型和闭包(4)——隐式原型
- Javascript中闭包(Closure)的探索(一)-基本概念
- JavaScript中的匿名函数及函数的闭包
- 理解javascript 闭包
- javascript 中的闭包
- javascript深入理解js闭包
- 当javaScript从入门到提高前需要注意的细节:闭包部分
- 当javaScript从入门到提高前需要注意的细节:闭包部分
- javascript深入理解js闭包
- JavaScript原型和闭包学习笔记
- Javascript中闭包的作用域链
- 深入理解javascript原型和闭包(10)——this