gpt4 book ai didi

javascript - 通过重新定义使一个函数运行一次

转载 作者:行者123 更新时间:2023-11-30 17:26:05 25 4
gpt4 key购买 nike

我发现自己最近使用这种模式来进行只应运行一次的初始化:

function myInit() {
// do some initialization routines
myInit = function () {return;};
}

这样如果我有两个不同的方法需要 myInit 做的事情,它会确保它只运行一次。见:

function optionA() { myInit(); doA(); }
function optionB() { myInit(); doB(); }

在我的脑海里,我觉得我错过了什么,我不应该这样做。我有什么理由不应该编写这样的代码吗?

最佳答案

Is there any reasons why I shouldn't write code like this?

一个原因是该函数只会在您定义它的范围内按照您的预期工作。例如如果您将函数传递到其他地方,它不会受到您的修改的影响,在最坏的情况下会创建一个隐式全局变量。例如

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com