如何在异步加载的 HTML 元素之间创建信号量

2024-03-24

我在 HTML 页面中有一个出现多次的元素,并且运行相同的 JS。 问题是,我希望它只有在第一个运行它时才执行特定功能(他的兄弟姐妹从未运行过它)。

我需要信号量在它们之间同步。 我无法知道如何在 JS 中声明变量并以这种方式执行信号量。


有很多方法。

你需要立一个flag某处。在没有其他东西的情况下,你可以把它戴上window,但使用不太可能与其他名称冲突的名称。

那么 JavaScript 就非常简单了:

if (!window.myUniqueNameFlag) {
    window.myUniqueNameFlag = true;
    // Do your processing
}

但话又说回来,把东西穿上window如果你能避免它,那并不理想,尽管它是very常见做法。 (您在全局范围内声明的任何变量var1 是一个属性window,就像您在全局范围内声明的任何函数一样。)

如果您的函数已在全局范围内声明(因此已占用全局标识符/窗口属性),则可以这样做以避免创建第二个标识符。代替:

function foo() {
    // ...your processing...
}

Do this:

var foo = (function() {
    var flag = false;

    function foo() {
        if (!flag) {
            flag = true;
            // ...your processing...
        }
    }

    return foo;
})();

这看起来很复杂,但事实并非如此:它定义并立即调用一个匿名函数,在该函数中定义一个变量和一个嵌套函数,然后返回嵌套函数的引用并将其分配给foo多变的。您可以致电foo你会得到嵌套函数。嵌套函数有一个持久的参考 to the flag变量,因为它是一个变量的闭包 http://blog.niftysnippets.org/2008/02/closures-are-not-complicated.html,但其他人看不到它。这是完全私人的。

A third选项是只在函数对象本身上使用一个标志:

function foo() {
    if (!foo.flag) {
        foo.flag = true;
        // ...do your processing...
    }
 }

函数只是具有被调用能力的对象,因此您可以为其添加属性。


1 在全局范围内声明的变量let or const是全局变量,但不会成为属性window.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在异步加载的 HTML 元素之间创建信号量 的相关文章

随机推荐

  • 在 Windows 上更改 apache 的文档根不起作用

    我正在尝试更改本地 Windows 计算机上的 documentroot 以指向 htdocs 下面的子目录 我已经更改了 httpd conf 中的 DocumentRoot 位置以及目录位置 我已经重新启动了 Apache 但用 PHP
  • 为什么十六进制数会自动转换为十进制数?

    我正在开发一个Python小方法 它需要从另一个文件中读取代表键和值的字典 但我似乎遇到了我发送的数值表示的问题 例如 我的字典中的某些键如下所示 id dict val a 0x0000 val b 0x1000 但我注意到 当我尝试遍历
  • 如果目录不存在则创建

    我正在编写一个 PowerShell 脚本来创建多个目录 如果它们不存在 文件系统看起来与此类似 D D TopDirec SubDirec Project1 Revision1 Reports D TopDirec SubDirec Pr
  • @GenerateValue 和 @GenericGenerator 之间的区别

    有时我发现他们在一起 有时单独 其他时候他们似乎也做同样的事情 有什么不同 以下是三个例子 他们的做法有何不同 为什么我不能对所有这些都使用 GenerateValue 实施例1 Id GeneratedValue generator in
  • VueJS CKeditor5上传图片

    在 Vuejs 中使用 CKeditor5 上传图像时遇到问题 第一次尝试过简单上传适配器 https ckeditor com docs ckeditor5 latest features image upload simple uplo
  • Fluent NHibernate 主键约束命名约定

    有没有办法在 Fluent NHibernate 中为我的主键约束创建命名约定 我知道您可以命名外键约束 但似乎不可能命名主键约束 FNH 的 James Gregory 说 不 NHibernate 不支持这一点 因此我们也无法支持它 h
  • 有没有办法将自定义颜色存储在文件中并从 iOS 中的代码访问它们?

    我是一个 iOS 新手 但我有一些 Android 编程经验 我记得在 Android 中你可以在一个文件中定义一组自定义颜色颜色 xml您可以在代码中使用该文件 因此 每次必须在某处应用新颜色时 无需以编程方式定义新颜色 我的问题是 iO
  • 如何序列化List

    我有A班 B班和C班是A班的一部分 Class A Few Properties of Class A List
  • OpenGL4.5 - 绑定多个纹理和采样器

    我试图了解 OpenGL 4 5 中的纹理 纹理单元和采样器 我附上一张我想弄清楚的图片 我认为在我的示例中一切都是正确的 但我不太确定右侧带有问号的 1D 采样器 所以 我知道 OpenGL 提供了许多纹理单元 绑定点 可以在其中绑定纹理
  • 模型驱动架构值得吗?工具的最新技术水平如何?

    我们的商店经常遇到一个问题 即同一类别 实体有 3 或 4 种不同的表示形式 java 版本 xml 版本 hibernate 版本 json 版本 您明白了 显然这会产生维护问题 模型驱动架构可能不止于此 但我真正想要的是一个系统 它允许
  • 如何让 Resharper 转换回 foreach 循环

    Resharper 5 可以转换我的foreach循环到 Linq 查询 我喜欢哪个 但是 linq 比foreachloop 当我转换我的foreach语句到 linq 查询 我没有看到任何以其他方式返回的选项 有谁知道如何做到这一点 有
  • 如何忽略目录中除一个文件之外的所有内容

    回购结构 gitignore file1 file2 dir file3
  • 召唤辅助以获得更高种类的类型,而不参考原始类型

    我正在尝试将 Aux 模式与更高种类的类型一起使用 并且直到之后才必须指定更高种类类型的参数 这类似于所描述的SO问题here https stackoverflow com questions 52581986 aux pattern f
  • 如何从不同(子)目录中打包 java 源文件?

    考虑以下目录结构 source com mypackage A java extensions extension1 source com mypackage T java extensions extension2 source com
  • ActiveRecord:find_in_batches 的替代方案?

    我有一个加载数千个对象的查询 我想通过使用来驯服它find in batches Car includes member where engine gt 123 find in batches batch size 500 根据文档 我不能
  • Babel + Mocha 堆栈跟踪报告错误的行号

    使用 Babel 6 和 Mocha 时 堆栈跟踪报告错误的行号 我很确定这是因为转译添加了额外的代码 对我来说 这是 Babel 6 与 Babel 5 x 中的新行为 有人有关于如何在使用 Mocha 进行单元测试时解决此问题的解决方案
  • 向量化 R 的 dplyr 中每行的“日期范围的扩展”

    我在 R 中的 tibble 中有一个数据集 如下所示 A tibble 50 045 x 5 ref key start date end date
  • 如何使用 Robo 3T 从 MongoDB 导出 JSON

    我正在使用 Robo 3T 以前称为 RoboMongo 我将其连接到 MongoDB 我需要做的是 MongoDB 中有一个集合 我想从该集合中导出数据 以便将其保存到文件中 I used the interface to open th
  • 打印 rdlc 报告而不查看打印对话框

    我正在编写一个 POS 应用程序 需要经常打印发票 我需要将其直接发送到打印机 而不是查看打印对话框 使用 Reportviewer renderingcomplete 我可以避免看到报告 但我不知道如何避免看到打印对话框并在没有用户干预的
  • 如何在异步加载的 HTML 元素之间创建信号量

    我在 HTML 页面中有一个出现多次的元素 并且运行相同的 JS 问题是 我希望它只有在第一个运行它时才执行特定功能 他的兄弟姐妹从未运行过它 我需要信号量在它们之间同步 我无法知道如何在 JS 中声明变量并以这种方式执行信号量 有很多方法