Javascript:闭包、面向对象、构造函数
一、闭包技术详解
1.1 什么是闭包
闭包就是大函数内部的小函数中,调用小函数外部(大函数内部)的参数
闭包实际上是一种函数,所以闭包技术也是函数技术的一种;闭包能做的事情函数几乎都能做。
闭包技术花式比较多,用法也比较灵活,一般开发人员在学习闭包的时候都会遇到瓶颈,主要是因为闭包技术的分界线并不明显。几乎无法用一个特点去区分。
当一个内部函数被其外部函数之外的变量引用时,就形成了一个闭包。
function A(){ function B(){ console.log("Hello YJH!");} return B; } var b = A(); b();//Hello YJH!
闭包的最大用处有两个:一个是可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
使用闭包返回函数,间接调用局部变量。<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> <script>function test1() {var age = 19; //局部变量}console.log(age); </script> </body> </html>
运行结果:
function test1() {var age = 19; //局部变量return function () {console.log(age); //返回一个函数} } var func = test1(); func();
运行结果:
1.2 常见的闭包使用形式
将函数作为另一个函数的返回值
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<script>function fn1() {var num = 10;function fn2() {num++;console.log(num)}return fn2;}var f = fn1();f();
</script>
</body>
</html>
可以在这里查看闭包
使用闭包最重要的意义:一个函数中的部分子函数在函数调用完成后仍希望保存,可以使用闭包将小函数作为大函数的返回值进行传输保存。
当引用的变量无用时,需要及时删除闭包,不然会造成资源浪费。令保存闭包的全局变量=null,即可让闭包变成垃圾对象删除。
将函数的形参作为实参传递给另一个函数调用
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<script type="text/html">// 1. 将函数作为另一个函数的返回值function fn1() {var num = 10;function fn2() {num++;console.log(num)}return fn2;}var f = fn1();f();
</script>
<script>// 2.将函数的形参作为实参传递给另一个函数调用function logMsgDelay(msg, time) {setTimeout(function () {debugger;console.log(msg);}, time);}logMsgDelay('Joker',1000);
</script>
</body>
</html>
1.3 封闭作用域
JavaScript的GC机制
在javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收,否则这个对象一直会保存在内存中。
封闭作用域
封闭作用域又称值为封闭空间,还有一个昵称叫小闭包,以及匿名函数自调。
基本结构:
(function(){})(); ;(function(){})(); +(function(){})(); -(function(){})(); ?(function(){})();
技法最大目的: 全局变量私有化
技术优点:
- 不污染全局空间!
- 内部所有的临时变量执行完毕都会释放不占内存。
- 可以保存全局数据。
- 更新复杂变量。
1.4 作用域链
- 嵌套之间的函数会形成作用域链,每次对变量的访问实际上都是对整条作用域链的遍历查找。先查找最近的作用域,最后再查找全局作用域。如果在某个作用域找到了对量就会结束本次查找过程。
- 思考?
Javascript:闭包、面向对象、构造函数相关推荐
- 【JavaScript】面向对象——构造函数(详解)
文章目录 理解并上手使用JavaScript中的构造函数 1.我们先理解什么是构造函数? 2.JavaScript中的构造函数是怎么样的? 3.使用new操作符会发生什么? 4.构造函数的属性 5.构 ...
- js 闭包函数 构造函数_JavaScript中的闭包,库里函数和酷抽象
js 闭包函数 构造函数 In this article, we will talk about closures and curried functions and we'll play aroun ...
- JavaScript 使用面向对象的技术创建高级 Web 应用程序
最近,我面试了一个有五年 Web 应用程序开发经验的软件开发人员.四年半来她一直在从事 JavaScript 相关的工作,她自认为 JavaScript 技能非常好,但在不久之后我就发现实际上她对 J ...
- JavaScript高级 面向对象、正则表达式
JavaScript高级 面向对象.正则表达式 学习目标: 理解面向对象开发思想 掌握 JavaScript 面向对象开发相关模式 掌握在 JavaScript 中使用正则表达式 typora-cop ...
- 从λ演算到函数式编程聊闭包(2):彻底理解JavaScript闭包规则
闭包是很多语言都具备的特性,上篇<从抽象代数漫游函数式编程(1):闭包概念再Java/PHP/JS中的定义> 闭包的特性 闭包有三个特性: 函数嵌套函数 函数内部可以引用外部的参数和变量 ...
- Javascript闭包和闭包的几种写法及用途
好久没有写博客了,过了一个十一长假都变懒了,今天总算是恢复状态了.好了,进入正题,今天来说一说javascript里面的闭包吧!本篇博客主要讲一些实用的东西,主要将闭包的写法.用法和用途. 一.什么 ...
- 全面理解Javascript闭包和闭包的几种写法及用途【转】
一.什么是闭包和闭包的几种写法和用法 1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1. ...
- 全面理解Javascript闭包和闭包的几种写法及用途
一.什么是闭包和闭包的几种写法和用法 1.什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1. ...
- JavaScript闭包如何工作?
您将如何向了解其闭包概念(例如函数,变量等)的人解释JavaScript闭包,但却不了解闭包本身? 我已经在Wikipedia上看到了Scheme示例 ,但是不幸的是它没有帮助. #1楼 我知道已经有 ...
- 全面理解Javascript闭包和闭包的几种写法及用途--转载自https://www.cnblogs.com/yunfeifei/p/4019504.html...
全面理解Javascript闭包和闭包的几种写法及用途 好久没有写博客了,过了一个十一长假都变懒了,今天总算是恢复状态了.好了,进入正题,今天来说一说javascript里面的闭包吧!本篇博客主要讲一 ...
最新文章
- 获取错误:当试图让pgsql使用rails时,用户“postgres”的对等身份验证失败
- 多用户虚拟Web3D环境Deep MatrixIP9 1.04发布
- for vue 一行2列_JAVA基础练习试题(2)蓝桥杯 附源代码
- 《长安十二时辰》背后的文娱大脑:如何提升爆款的确定性?
- putty自动登录设置
- Windows To Ghost系统封装之必备软件集 - 好压
- selenium切换窗口
- 深度学习数字仪表盘识别_【深度学习系列】手写数字识别实战
- 【Qt】运行报错Could not create directory “E:\xxxx-Debug“
- C语言题目——三子棋游戏
- 怎么用计算机弹电脑病毒音乐,怎么制作电脑病毒?简单电脑病毒制作方法
- 荣誉背后的故事:达内到底有多强?
- Python简单监控键盘输入的木马实现
- Java使用OpenOffice将office文件转换为PDF
- html带有进度条的登陆,带进度条上传
- 模拟量万能换算公式4-20ma
- 【机器学习】极大似然估计、最大后验估计的对比与联系
- 设计测试用例的万能公式 + 6大具体方法 = 面试就像聊天?
- 内网终端管理:独立或统一管理都将大行其道
- 小知识:Java中冒号(:)有哪些用法?
热门文章
- 【JavaScript】面向对象——构造函数(详解)