我发现自己最近使用此模式进行了初始化,该初始化只能运行一次:
function myInit() {
// do some initialization routines
myInit = function () {return;};
}
这样,如果我有两种不同的方法需要myInit做一些事情,它将确保它只能运行一次。看到:
function optionA() { myInit(); doA(); }
function optionB() { myInit(); doB(); }
在我的脑后,我觉得我正在丢失某些东西,我不应该这样做。有什么原因为什么我不应该这样写代码?
最佳答案
有什么原因为什么我不应该这样写代码?
原因之一是该功能只能在您定义的范围内按预期工作。如果在其他地方传递该函数,则该函数将不受您的修改的影响,在最坏的情况下,它将创建一个隐式全局变量。例如。
function myInit() {
// do some initialization routines
myInit = function () {return;};
}
function foo(init) {
init();
init();
}
foo(myInit);
更好的方法是封装整个逻辑:
var myInit = (function() {
var initialized = false;
return function() {
if (initialized) return;
initialized = true;
// do some initialization routines
};
}());
现在,无论如何,在何处以及何时调用
myInit
,它将仅执行一次初始化步骤。关于javascript - 通过重新定义使函数运行一次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24255237/