下面是一段代码:
if (lastPosition == 0) {
callsomemethod(param);
}
我遇到了这种奇怪的情况,我必须调用函数callsomemethod(param);即使if条件多次为真。换句话说,我想确保即使if语句多次为真,函数callsomemethod也只被调用一次。在if语句中发生了更多的事情,为了简单起见,我只是把它们去掉了。
EDIT::感谢所有的回复。不幸的是,这些方法都不起作用,因为if语句在函数内部,并且该函数被多次调用,因此所有内容都被重新初始化。此外,该函数在IIFE内部。抱歉,没有在第一次拍摄时将所有内容都弄清楚。
先谢了
6条答案
按热度按时间3pmvbmvn1#
惯用的方法是使用一个锁变量,可以通过闭包隐藏。最简单的例子是:
要 * 产生 * 只能被调用一次的函数,你可以使用闭包和 Package :
(the
...args
语法可能在旧版浏览器中不起作用,应该用代码来验证arguments
并将其传递下去,为了简洁起见,我省略了这一点)这是像lodash曾经的助手的基础。
由于JS只允许单个线程访问变量,因此这本质上是线程安全的(例如它适用),并且如果多个回调尝试使用
once
-ified方法,则不会中断。72qzrwbm2#
添加一个标志来跟踪函数是否被调用过:
更高级的是,利用闭包来 Package 整个事情:
vmdwslir3#
声明一个全局变量var ran=false,在callsomethingmethod中将其设置为true,并扩展你的if:
osh3o9ms4#
你可以有一个名为
called
的布尔值,当你第一次调用这个方法时,它被设置为true:lsmepo6l5#
这里是另一种方法,但类似于以前的响应。您可以使用 Function prototype来添加调用一次行为。在下面的代码中,只有第一次调用才会打印结果。
qkf9rpyu6#
在我
react native
中,有一个函数(函数名为submitData()
)连续运行runs every 10 seconds
。我希望在我的submitData()函数中有另一个函数(函数名为callOnlyOnce()
),但这里我只运行了第一次。所以我用了
opop在main函数之上定义