如何确保脚本运行一次且只运行一次

Posted

技术标签:

【中文标题】如何确保脚本运行一次且只运行一次【英文标题】:How to make sure a script runs once and only once 【发布时间】:2012-01-08 15:57:33 【问题描述】:

我正在编写一个小部件模板,它将包含在安装它的页面中。

一个人可能会在一个页面中安装多个相同类型的小部件,因此我的模板可能会被多次包含。

现在我写了一些javascript 来初始化小部件,你知道,点击和悬停。

我的问题是这些<script>s 会被多次执行,例如,当我点击某个东西时,有界函数会被执行多次。

解决这个问题的最佳方法是什么?

编辑: 顺便说一句,我正在使用Mako 模板引擎,并且我尝试使用c 变量来存储布尔标志,但似乎c 每次都会被覆盖。

【问题讨论】:

在线包含<script>标签一次?!或设置一个标志以检查其何时运行,如果已设置标志则不运行它(cookie / global var) 见***.com/questions/3678628/… 【参考方案1】:

与 C 中用于防止头文件被多次包含的解决方案类似的解决方案怎么样?

例如,在“example.html”文件中,您可以将代码包装在这样的 if 语句中:

<script type=text/javascript>
    if (!window._EXAMPLE_HTML_) 
        window._EXAMPLE_HTML_ = true;
        // your code goes here
    
</script>

【讨论】:

我不知道如何使用我的模板引擎在included templates 之间共享一个变量:( @Satoru.Logic 全局变量属于浏览器而不是脚本 - 所以它无处不在 顺便说一句:将 EXAMPLE_HTML 添加到窗口对象并不是最好的样式。最好在某处创建另一个全局对象并使用它。 如果不是window,全局对象的作用域是什么? 没错,它是window的一个属性,所以如果你只需要一个变量,这个例子就可以了。但是,如果您需要多个变量名,则使用 window._INCLUDES_.EXAMPLEONE_HTMLwindow._INCLUDES_.EXAMPLETWO_HTML 之类的东西会更干净一些,因为这不会污染全局范围,变量名超出必要范围...

以上是关于如何确保脚本运行一次且只运行一次的主要内容,如果未能解决你的问题,请参考以下文章

新知识添加·欧拉回路+欧拉路径

PHP锁定/确保给定脚本在任何给定时间只运行一次

RXJS combineLatest running pipe 7 次一次发射

Flutter-如何一次且仅一次渲染listview.builder中的所有项目

如何在 React hooks 和 redux 中只获取一次且不再获取数据

如何确保我的 bash 脚本尚未运行?