在 Javascript 中使用闭包的好例子

2023-12-08

嗯,我最近了解了 Javascript 中的闭包。

虽然我发现它的概念确实令人惊叹,但我自己还没有找到适合它们的良好应用程序。

在所有博客文章中,我找到的所有教程中,我都很好地解释了它们是什么以及如何使用它们。

我在任何地方都找不到让我思考的例子:“哇!你可以用闭包做到这一点?太棒了!!!”。我找到的所有例子都像这个一样纯粹是学术性的。

function say667() {
  // Local variable that ends up within closure
  var num = 666;
  var sayAlert = function() { alert(num); }
  num++;
  return sayAlert;
}

var sayNumber = say667();
alert(sayNumber());

所以,我想知道你们中是否有人可以分享一些关于这些特殊功能的令人兴奋的经历。

我知道这是一个悬而未决的问题,但我会把答案归于最让我惊叹的人。

Thanks


闭包始终与稍后调用的回调函数一起使用,因为它们允许您访问主机调用函数的局部变量,或者可用于将局部变量的值“冻结”到特定回调的私有变量中。随着代码继续执行,但在调用回调之前,局部变量本身将更改为另一个值。

以下是我在此处提供的答案中的关闭示例。

从 setTimeout 回调访问父局部变量:https://stackoverflow.com/a/7032671/816620

将非静态信息传递到延迟回调中:https://stackoverflow.com/a/8660518/816620

我知道上个月我在 SO 答案中使用了数十次闭包(我只是不确定如何通过搜索快速找到更多示例,而无需费力浏览大量帖子)。

而且,这是一个创建私有变量的有用闭包:

function slides(images) {
    var slideImages = images || [];

    // because of this closure, the variable slideImages is available
    // to the method defined in here even though the slides function
    // has already finished executing
    this.addSlide = function(url) {
        slideImages.push(url);
    }
    this.clearSlides = function() {
        slideImages = [];
    }
}

// the slideImages variable is not available out here
// it is truly private inside the clsoure
var slideshow = new slides(imgArray);
slideshow.addSlide("xxx.jpeg");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Javascript 中使用闭包的好例子 的相关文章

  • Jquery获取选中的复选框

    您好 我想获取页面中选定复选框的列表 实际上我真正需要的是获取复选框旁边的元素的文本 该元素是一个 html 元素 li 代码如下 但它不起作用 这是我当前的 jQuery document ready function target cl
  • 如何删除除任何特定 id 之外的元素

    假设有一个父 id 其中包含许多元素 我想删除除一个元素之外的所有元素 ex parent id children not id n remove
  • 如何使用javascript确保元素仅在圆上朝一个方向移动?

    好吧 我承认我对三角学真的很糟糕 出于上下文的考虑 我将添加我在这里提到的问题中的内容 参考问题 https stackoverflow com a 39429290 168492 https stackoverflow com a 394
  • IntersectionObserver是否支持水平滚动观察?

    我制作了几个垂直滚动 IntersectionObserver 模块 但我对水平滚动感兴趣 根将是 div 观察目标将是 img 我想观察当 img 放大但 div 保持视口宽度时的变化 我什至不确定移动 Safari 是否会将缩放后的图片
  • JavaScript 验证和 PHP 验证?

    我正在使用 jquery 验证插件来验证空表单 我还应该在 PHP 中检查一下以确保 100 正确吗 或者用 javascript 验证就可以了 谢谢 您应该始终在服务器上进行验证 如果用户以某种方式不使用 Javascript 提交表单
  • ReactTransitionGroup 不适用于 React-redux 连接组件

    我正在开发一个更大的项目 但我创建了这个简短的示例来说明问题 如果我使用Box组件 它的工作原理 它在控制台中输出componentWillEnter and componentWillLeave当我们点击按钮时 如果我使用BoxConta
  • JavaScript 继承;调用和原型

    要在Javascript中实现继承 通常需要执行以下两个步骤 假设我有一个基类 Animal var Animal function name this name name 我现在想从中派生一个子类 Dog 所以我想说 var Dog fu
  • React Router v4 不渲染组件

    React Router v4 渲染组件存在问题 在应用程序初始加载时 它将呈现与 URL 相对应的正确组件 但是 任何后续的组件Link单击不会呈现所需的组件 图书馆 反应路由器 4 2 2 https reacttraining com
  • JavaScript推送函数中的动态变量

    我在 JavaScript 中使用推送功能 var chartData for var i 0 i lt 3 i chartData push date new Date year s mon s date s hr s min s sec
  • 如何在另一个自定义 Hook 中使用返回值的自定义 Hook?

    我正在使用 React native 其中有一个名为的自定义 HookuseUser使用以下方法从 AWS Amplify 获取用户信息Auth getUserInfro方法 然后获取返回对象的一部分并用它设置一个状态变量 我还有另一个名为
  • 使用 JavaScript 移动页面上的按钮

    我的按钮可以移动 但奇怪的是 我无法弄清楚偏移是否有问题 我希望我的按钮随着鼠标光标移动 但现在它的移动方式不是我想要的 有时它会消失 另外 创建的新按钮是重叠的 我不知道如何解决这个问题并拥有更好的外观 var coorA var coo
  • 如何始终将焦点保持在文本框中

    我创建了一个包含两个 div 的 HTML 页面 左侧的 div 页面的 90 是 ajax 结果的目标 右侧的 div 页面的 10 包含一个文本框 该页面的想法是在文本框中输入零件编号 通过条形码扫描仪 并显示与该零件编号匹配的绘图 显
  • LeafleteachLayer函数不会迭代所有Layer

    使用 GeoJSON 数据数组创建一些标记 getJSON GetLocationsServlet function data L geoJSON data onEachFeature onEachFeature addTo mymap G
  • Vaadin 12 将对象传递给 JavaScript 函数:无法对类进行编码

    Vaadin 12 Kotlin 项目 In my myPage html我有JavaScript myObject redirectToCheckout sessionId 1111 2222 所以我需要调用javaScript函数red
  • 使用javascript动态更新css内容

    需要将 css 更新为动态值 我不确定最好的方法是什么 div style zoom 1 div 缩放级别将根据窗口大小调整触发 应用程序将相应缩放 我将此应用程序加载到 cordova 中并让它在 iPAD 中运行 然后我意识到需要使用
  • 主页(网格)上的缩略图现在显得模糊。如何纠正?

    我不知道这看起来是否愚蠢 但从早上开始我就无法纠正这个突然出现在我的博客网站上的错误www candidopinions in http www candidopinions in 我有一个网格视图模板 其中博客文章中的特色图像作为调整大小
  • Highcharts jQuery 渲染问题 - 所有浏览器

    我在尝试使用构建堆积柱形图时遇到了一个奇怪的问题高图表 http www highcharts com 当图表呈现时 在您调整浏览器大小之前 不会显示列无论如何 导致图表重绘 我认为 图表的其余部分显示 轴 标题等 但不显示列本身 我在 I
  • react-native - 图像需要来自 JSON 的本地路径

    你好社区 我正在react native中开发一个测试应用程序 并尝试从本地存储位置获取图像 我实际在做什么 我将图像直接链接源提供给 var 并在渲染函数中调用此方法 react 0 14 8 react native 0 23 1 np
  • 在 iOS 7 Safari 中,如何区分通过边缘滑动与后退/前进按钮的 popstate 事件?

    在 iOS 7 Safari 中 现在有两种后退 前进导航方式 使用底部的传统后退 前进按钮箭头或从屏幕边缘滑动 我正在使用动画在 ajax 应用程序中的页面之间进行转换 但如果用户通过边缘滑动进行导航 我不想触发该转换 因为这本身就是一个
  • 将数组从 jquery ajax 传递到代码后面

    我必须将二维数组传递给在asp net网页代码后面编写的页面方法我有一个变量objList作为二维数组 我使用以下代码来实现此目的 但没有成功 并且未调用页面方法 脚本语言 function BindTable objList ajax u

随机推荐

  • 如何在内核中打印当前时间?

    我是linux的初学者 抱歉我的英语不好 我应该打印当前时间并通过Linux中的系统调用做一些事情 我做了其他事情但未能打印当前时间 我写的是 include
  • Codeigniter 的路由不正确

    我安装了 Windows 版 Apache 我购买了 CodeIgniter Professional 并下载了他们的源代码 它说我应该将其 htaccess 放在网站的根文件夹中 所以我这样做了 我将基本 URL 设置为http 127
  • 获取公共互联网 IP 地址/地理位置的智能方法

    我在本地网络上有一台计算机 位于 NAT 路由器后面 我有一些 192 168 0 x 地址 但我真的很想知道我的publicIP 地址 未在 如何获取运行 C 应用程序的服务器的 IP 地址 or 如何在C 中获取机器的IP地址 我需要
  • 是否有一个类似字典的不可变对象? [复制]

    这个问题在这里已经有答案了 我想要一个Python对象 它可以灵活地接受任何键 并且我可以通过键访问 就像字典一样 但它是不可变的 一种选择是灵活地生成namedtuple但这样做是不好的做法吗 在下面的示例中 linter 不会期望nt有
  • 在 Chrome 扩展中显示几个 JS 变量值

    是否可以在我构建的扩展中获取我的网站 2 3 js 变量 以便我能够看到我构建的网站背后的信息 该扩展将帮助我开发我的网站 查看给定网站的变量 使用内容脚本 是可能的 只需注入您自己的内容脚本 并创建一个读取变量的脚本标记 由于内容脚本功能
  • 在Windows 7中为java和ant设置环境变量

    我有一本书说要执行以下操作 添加 JAVA HOME 和 ANT HOME 环境变量 查看 将 JAVA HOME bin 和 ANT HOME bin 添加到我的路径变量 检查 当我转到命令提示符并尝试 ant version 时 它说
  • 如何创建像 std::cout 这样的函数?

    我正在为我的项目创建自己的日志记录实用程序 我想创建一个像 iostream 的 std cout 这样的函数 以记录到文件并打印到控制台 这就是我想要的 enum debug error warning info LOG level lt
  • PHP 中使用数组上的 foreach 循环对父节点和子节点进行排序的递归函数

    我有一个存储在数组中的数据集 该数组使用父子 id 引用自身 id parent id title等等 顶层有一个parent id of 0 可以有无数的亲子关系 所以我用一个对这个数组进行排序foreach在递归函数中循环以根据其父元素
  • 将 JavaScript 确认框的结果分配给 PHP 变量

    this is in php function msgbox msg type if type alert Simple alert window gt
  • 方法 BOOL 从块内部返回

    我正在尝试将 Beelex 的新应用内购买验证添加到我的应用程序中 但是我正在努力从块内传递返回值 这是我现在的代码 正如您所看到的 我设置了一个 BOOL 值 然后在验证块中设置了 BOOL 并在最后返回它 然而 最后的 return 是
  • 如何制作带有日期和时间列的mysql表?

    我正在尝试创建一个包含日期和时间列的表 用于在数据库中记录条目时存储日期和时间信息 在 MySQL 文档中显示了以下示例 CREATE TABLE t1 ts TIMESTAMP DEFAULT CURRENT TIMESTAMP dt D
  • Typedef 位域变量

    我想要一个 1 位整数的 typedef 所以我想到了这一点typedef int 1 FLAG 但我遇到了错误 有什么办法可以做到这一点吗 谢谢 No C 程序中最小的可寻址 事物 是byte or char A char至少有 8 位长
  • Flex DataGrid 列宽

    在我的 Flex 应用程序中 我将列的宽度和可见性存储在 xml 文件中 当应用程序加载时 它从 xml 文件中读取并设置适用的列值 for i 0 i lt columnsOrder length i newOrder i myDG co
  • 错误:执行 rvm 升级命令后缺少 RVM 环境文件 - Passenger 4.0.23

    我在 Mac Mini 服务器 Mavericks 10 9 1 上运行 ruby 2 0 0 p247 我了解到存在安全漏洞 因此我决定升级以使用最新的 Ruby 补丁 2 0 0 p353 我执行了以下命令 gem update sys
  • TypeError:无法读取 Object.View_FullEditTaxComponent_0._co 处未定义的属性“taxTypeId”[作为 updateDirectives]

    我有一个详细信息表单 当从列表表单中选择时 应该加载记录的详细信息 当详细信息表单加载时 它应该显示所选记录的详细信息 就我而言 它显示的详细信息很好 但它在控制台上显示标题错误 导致应用程序崩溃 HTML 错误行
  • 在react-router 4中使用锚标签

    当用户通过锚链接导航到页面时 我希望页面向下滚动到我的锚标记 我正在使用react router 4 我的定义如下 navbar export default props gt const updateModal updateRoute p
  • 在R中使用rsm在persp后画一条线

    我使用以下代码使用 RSM 包的 persp 函数在 R 中的 x y 平面上绘制了带有轮廓投影的 3d 响应曲面 x lt seq 3 3 by 0 25 y lt seq 3 3 by 0 25 d lt expand grid x x
  • 根据文本值更改表格单元格的文本和背景颜色

    我有一个包含三列的表 如下所示 类别 项目 STATUS 该表填充了来自 php 脚本的数据 我需要确保如果 PRIORITY 值是 php 数据导入的结果 标题 STATUS 下的单元格将更改为红色背景和白色文本颜色 这是我的js脚本
  • 使用 jps 未列出 namenode、datanode

    环境 ubuntu 14 04 hadoop 2 6 我输入后start all sh and jps DataNode未在终端上列出 gt jps 9529 ResourceManager 9652 NodeManager 9060 Na
  • 在 Javascript 中使用闭包的好例子

    嗯 我最近了解了 Javascript 中的闭包 虽然我发现它的概念确实令人惊叹 但我自己还没有找到适合它们的良好应用程序 在所有博客文章中 我找到的所有教程中 我都很好地解释了它们是什么以及如何使用它们 我在任何地方都找不到让我思考的例子