当前位置:网站首页>简单介绍一下闭包及它的一些应用场景
简单介绍一下闭包及它的一些应用场景
2022-07-07 09:09:00 【InfoQ】
闭包
前言
什么是闭包?
function drink() {
var beerName = "雪花啤酒";
let beerNum1 = 1;
const beerNum2 = 2;
var innerBeer = {
getBeer:function() {
console.log(beerNum1)
return beerName
},
setBeer:function(newBeer) {
beerName = newBeer
}
}
return innerBeer
}
var go = drink();
go.setbeer("闷倒驴");
go.getBeer();
console.log(go.getBeer())
为什么说闭包容易产生内存泄漏?
var go = drink();
为什么还要使用闭包?
闭包的应用
- 模仿块级作用域
- 计时器的一个应用
for (var i = 0; 1 < 10; i++) {
(function (j) {
setTimeout(function () {
console.log(j);
}, 1000 * j)
})(i)
}
- 打印一组li的下标
for(var i = 0; i < lis.length; i++) {
(function(j) {
lis[j].onclick = function() {
alert(j)
}
})(i)
}
- 埋点计数器
- 产品让做的网站分析的一种常用的数据采集方法
function count() {
var num = 0;
return function() {
return ++num
}
}
var getNum = count(); // 第一个需要统计的地方
var getNewNum = count(); //第二个需要统计的地方
// 如果我们统计的是两个button的点击次数
document.querySelectorAll('button')[0].onclick = function() {
console.log('点击按钮1的次数:'+getNum());
}
document.querySelectorAll('button')[0].onclick = function() {
console.log('点击按钮2的次数:'+getNewNum());
}
- 柯里化
- 把一个多参数的函数转化成单参数函数的方法,使得更灵活方便
// 原函数 用来检验文本是否符合规范
// reg 传入的正则表达式 txt 需要被检测的文本
function check(reg,txt){
return reg.test(txt)
}
console.log(check(电话号码的正则,13923456789));
console.log(check(邮箱的正则,[email protected]));
// 现如今
function nowCheck(reg){
return function(txt){
return reg.test(txt)
}
}
var isPhone = nowCheck(电话号码的正则)
console.log(isPhone('13923456789'))
var isEmail = nowCheck(邮箱的正则)
console.log(isEmail('[email protected]'))
总结:简单说一下闭包吧
边栏推荐
- uniapp 在onLaunch中跳转页面后,点击事件失效解决方法
- Avoid mutating a prop directly since the value will be overwritten whenever the parent component
- The opacity value becomes 1%
- 关于jmeter中编写shell脚本json的应用
- PR Lecture Notes
- [untitled]
- IDEA快捷键大全
- 基于STC8G1K08的0.96寸IIC液晶屏驱动程序
- Network foundation (1)
- Static semantic check of clang tidy in cicd
猜你喜欢
Force buckle 1002 Find common characters
What if copying is prohibited?
Basic knowledge of process (orphan, zombie process)
Verilog 实现数码管显视驱动【附源码】
[machine learning 03] Lagrange multiplier method
Qtcreator sets multiple qmake
[untitled]
Simple and easy to modify spring frame components
Vscode 尝试在目标目录创建文件时发生一个错误:拒绝访问【已解决】
Deeply understand the characteristics of database transaction isolation
随机推荐
electron添加SQLite数据库
Interprocess communication (IPC)
seata 1.3.0 四種模式解决分布式事務(AT、TCC、SAGA、XA)
Socket socket programming
Realize ray detection, drag the mouse to move the object and use the pulley to scale the object
对比学习之 Unsupervised Learning of Visual Features by Contrasting Cluster Assignments
Compile QT project script with qmake
The database synchronization tool dbsync adds support for mongodb and es
关于SIoU《SIoU Loss: More Powerful Learning for Bounding Box Regression Zhora Gevorgyan 》的一些看法及代码实现
Go slice comparison
Galaxy Kirin desktop operating system installation postgresql13 (source code installation)
Get pictures through opencv, change channels and save them
[untitled]
"Dream Cup" 2017 Jiangsu information and future primary school summer camp it expert PK program design questions
变量的解构赋值
uniapp 在onLaunch中跳轉頁面後,點擊事件失效解决方法
Activity生命周期
How to play video on unityui
Wallhaven wallpaper desktop version
在我有限的软件测试经历里,一段专职的自动化测试经验总结