2020-6:闭包(JavaScript)
文章目录
- 闭包:作用域应用的特殊情况,
- 1.函数作为返回值被返回
- 2.函数作为参数被传递
- 闭包:重用变量同时保护变量不被污染的机制。
闭包:作用域应用的特殊情况,
有2种表现
1.函数作为返回值被返回
// 函数作为返回值function create(){const a = 100return function(){console.log(a)}}const fn = create()const a = 200fn() // 100
2.函数作为参数被传递
// 函数作为参数被传递function print(fn){const a = 200fn()}const a = 100function fn(){console.log(a)}print(fn) // 100// 注:所有的自由变量的查找,是在函数定义的地方,向上级作用域查找,而不是在执行的地方
闭包:重用变量同时保护变量不被污染的机制。
外层函数被调用后,外层函数的作用域对象(因为被内层函数引用着)无法释放,则会产生闭包。
缺点在于不会自动释放,只能手动释放,易造成内存泄露,从而比普通函数占用更多的空间
let funs = []for(let i = 0; i < 3; i++){funs[i] = (function(i){// 注意此处是按值传递return function(){console.log('i:',i)}})(i)}/* 执行后形成闭包funs = [function(){ (i=0)console.log('i:',i)},function(){ (i=1)console.log('i:',i)},function(){ (i=2)console.log('i:',i)},]*/funs[0]() // 0funs[1]() // 1funs[2]() // 2function fun(){for(let i = 0,arr = []; i < 3; i++){arr[i] = function(){console.log('i',i)}}return arr}let funs1 = fun()/*外层函数被调用1次,执行后形成一个闭包*/funs1[0]() // 3funs1[1]() // 3funs1[2]() // 3
2020-6:闭包(JavaScript)相关推荐
- 闭包 —JavaScript面向对象高级
# 闭包 # 我的理解:面试时,先说作用域链,再说闭包产生的原因,然后是垃圾回收GC,最后说闭包. a.一个函数内部声明的变量,就是它的私有变量. b.在javascript中特性中,函 ...
- 函数闭包--JavaScript权威指南--基础篇4
函数JavaScript权威指南–基础篇4 一.知识点–函数–闭包 1.要理解函数闭包,要先知道几个概念: ①块级作用域和函数作用域的概念 FAQ:什么是块级作用域? 在类C语言中是这么定义的:变量的 ...
- JAVAWeb学习笔记2020/5/15——JavaScript高级笔记
第一章 DOM简单学习:为了满足案例要求 1. 功能:控制html文档的内容 2. 获取页面标签(元素)对象:Element document.getElementById("id值&quo ...
- 2020年,JavaScript开发人员必备的5项高薪技能
全文共1816字,预计学习时长5分钟 图源:unsplash 开发人员的一生可以用两句话概括:计算器,以及学习新技能.成为开发人员绝非易事,他们是解决问题的人,也是不断学习的人.科技世界每天都在快速变 ...
- JavaScript进阶系列01,函数的声明,函数参数,函数闭包
本篇主要体验JavaScript函数的声明.函数参数以及函数闭包. □ 函数的声明 ※ 声明全局函数 通常这样声明函数: function doSth() { alert("可以在任何时候调 ...
- Javascript闭包——懂不懂由你,反正我是懂了
摘要:"如果你不能向一个六岁的孩子解释清楚,那么其实你自己根本就没弄懂."好吧,我试着向一个27岁的朋友就是JS闭包(JavaScript closure)却彻底失败了. 越来越觉 ...
- javascript 中的暗物质 - 闭包
1. 诡异的闭包 javascript 中有一个特殊的特性 - 闭包,对于 .NET 程序员来说,比较熟悉的是面向对象的程序设计 OOP, 而来自函数式语言的闭包则显得比较诡异,许多程序员对它敬而远 ...
- javascript闭包_通过邮寄包裹解释JavaScript闭包
javascript闭包 by Kevin Kononenko 凯文·科诺年科(Kevin Kononenko) 通过邮寄包裹解释JavaScript闭包 (JavaScript Closures E ...
- Deno 冲上榜首,Vue.js 首次屈居第二,JavaScript 2020 年度“新起之秀”都有谁?
整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 近些年来,科技领域飞速发展,人工智能.云计算.大数据.物联网等新兴技术日益蓬勃,各类前沿技术逐渐落地,服务于每个人的日常点滴.这些技术究 ...
- javascript 闭包的好处及坏处
闭包javascript 是最强大的特征之一,它允许函数访问局部作用域之外的函数. 创建闭包的常见方式:就是在一个函数里创建另一个函数 function fun(){return function{a ...
最新文章
- centos安装软件_CentOS 8 和 Ubuntu 18.04 部分软件版本比较
- 计算机义务维修队,我院捷诚义务维修服务队电脑维修服务活动
- 高效程序员的45个习惯 pdf_高效瑜伽人的 5 个习惯,你get到了几个?
- Fragment生命周期与Fragment执行hide、show后的生命周期探讨
- DP备份任务失败原因解析
- 代码中有个get是啥意思_是时候秀一波了,甩掉get和set,Lombok让代码更简洁
- AI学习笔记(四)相机模型、图像聚类算法
- apache poi使用例_使用java Apache poi 根据word模板生成word报表例子
- 终于掌握vim的寄存器和系统剪贴板的使用了- 要安装vim-X11包
- python字符串和字节串有什么区别_python中的字符串和字节串
- 虚拟机Linux服务器网络设置
- Bulletproofs、Sigma protocol、Halo2等ZK方案小结
- stm32定时器3产生1us延时的函数
- 高德地图第三方工具网站
- 【细胞分割】基于阙值+边缘+形态学+种子点图像分割matlab源码含 GUI
- 清除“全能车”这颗“毒瘤”,共享单车再出发
- php artisan 命令详解,Artisan命令详解
- 31年前的Beyond演唱会,是如何超清修复的?(推荐)
- android装windows bios,普通安卓平板刷win10图文教程
- 浙江大学计算机学院的软件工程和软件学院的软件工程哪个好,软件工程专业最强十校,浙大第二、清华第五,这所师范类院校很意外...
热门文章
- 解说:C++难在了哪里?
- git分支怎样改名字
- 交叉表 mysql_MySQL交叉表_MySQL
- 荣耀笔记本linux指纹设置方法,magicbookwin10系统指纹无法录入怎么办 荣耀笔记本不能使用指纹怎么解决...
- 散场电影,给一个陌生人看:伤感日志
- POI分析之城市功能区识别与时空变化
- 2018.7.9-注册及头像预览
- Android 5.0(Lollipop)事件输入系统(Input System)
- 阿里云负载均衡的分发权重配置不生效
- C#【自动化测试】对Windows桌面应用程序进行UI自动化测试