Javascript 在独立函数中,是否将第一次运行与其他运行区分开来?

Javascript 在独立函数中,是否将第一次运行与其他运行区分开来?,javascript,architecture,closures,Javascript,Architecture,Closures,我有一个项目,每个功能都是完全独立的,就像一个模块 这意味着我可以将此功能复制到另一个项目中,并且一切正常 但是,我有一个例子,如果这些函数中的一个是第一次运行的,或者之前已经运行过,那么它们的行为会有所不同 目前,我发现实现这一点的唯一方法是使用一个外部布尔值,我希望避免这样做: var init = true; function someFunc() { if (init) { init = false; // First run code }

我有一个项目,每个功能都是完全独立的,就像一个模块

这意味着我可以将此功能复制到另一个项目中,并且一切正常

但是,我有一个例子,如果这些函数中的一个是第一次运行的,或者之前已经运行过,那么它们的行为会有所不同

目前,我发现实现这一点的唯一方法是使用一个外部布尔值,我希望避免这样做:

var init = true;
function someFunc() {
    if (init) {
        init = false;
        // First run code
    }
    else {
        // Not first run code
    }
}

javascript中是否有某种方法可以在没有外部布尔值的情况下,在“独立”函数中实现相同的功能

以上是我在评论中描述的内容。请注意,可能有更有效的方法可以在更少的代码行中实现这一点,但是出于学习的目的,我认为这是编写它的最佳方法

var myFunction=(function(){
让第一次=真实;
返回函数trueFunction(){
如果(第一次){
console.log('first!');
第一次=错误;
}否则{
日志(“首先,哦,该死的!”);
}
}
})()
myFunction();
myFunction();
myFunction()是的,您可以使用

生成器是可以退出然后重新输入的功能。 它们的上下文(变量绑定)将跨重新入口保存

因此,您不仅可以区分第一次跑步,还可以区分每个特定跑步。像这样:

函数*foo(){
产生“第一次”;//第一次
产生“second”;//第二次
产生“第三次”;//第三次
}
var str=“”;
for(让val of foo()){
str=str+“”+val;
}

console.log(str)//第一个第二个第三个
当你说“复制”时,你是指物理复制粘贴代码,还是通过引用传递到其他代码?如果是前一种情况,请使用一个表示函数是否已运行的变量将函数包装在一个闭包函数中,然后返回内部函数。我的意思是物理复制另一个项目文件中的代码。可以使用:将函数包装在内部:
(函数(){…})(