当前位置:网站首页>简单介绍一下闭包及它的一些应用场景
简单介绍一下闭包及它的一些应用场景
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]'))
总结:简单说一下闭包吧
边栏推荐
猜你喜欢
[untitled]
基于DE2 115开发板驱动HC_SR04超声波测距模块【附源码】
The use of list and Its Simulation Implementation
[machine learning 03] Lagrange multiplier method
普通测试年薪15w,测试开发年薪30w+,二者差距在哪?
VR development optimization
[untitled]
Simple and easy to modify spring frame components
[C #] the solution of WinForm operation zoom (blur)
关于SIoU《SIoU Loss: More Powerful Learning for Bounding Box Regression Zhora Gevorgyan 》的一些看法及代码实现
随机推荐
Seata 1.3.0 four modes to solve distributed transactions (at, TCC, Saga, XA)
Galaxy Kirin desktop operating system installation postgresql13 (source code installation)
学习笔记|数据小白使用DataEase制作数据大屏
Wallhaven wallpaper desktop version
[untitled]
PostgreSQL中的表复制
基于DE2 115开发板驱动HC_SR04超声波测距模块【附源码】
通过 Play Integrity API 的 nonce 字段提高应用安全性
2022.7.4DAY596
如何在博客中添加Aplayer音乐播放器
IDEA快捷键大全
[untitled]
Poj1821 fence problem solving Report
Ping tool ICMP message learning
数据库同步工具 DBSync 新增对MongoDB、ES的支持
How to play video on unityui
SQL Server knowledge gathering 9: modifying data
RationalDMIS2022 高级编程宏程序
Une fois que l'uniapp a sauté de la page dans onlaunch, cliquez sur Event Failure resolution
Template initial level template