如何确保脚本运行一次且只运行一次
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_HTML
和 window._INCLUDES_.EXAMPLETWO_HTML
之类的东西会更干净一些,因为这不会污染全局范围,变量名超出必要范围...以上是关于如何确保脚本运行一次且只运行一次的主要内容,如果未能解决你的问题,请参考以下文章
RXJS combineLatest running pipe 7 次一次发射
Flutter-如何一次且仅一次渲染listview.builder中的所有项目