首先在独立功能上与其他产品区别开来吗?

时间:2018-06-27 12:34:50

标签: javascript architecture closures

我有一个项目,每个功能都像模块一样完全独立。

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

但是,在某些情况下,如果它们是第一次运行或以前已经运行过,则其中一个功能的行为会有所不同。

就目前而言,我发现实现此目标的唯一方法是使用外部布尔值,就像这样,我想避免这种情况:

class Choice(models.Model):
    question = models.ForeignKey(Poll, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)

    class Meta:
       unique_together = (('question', 'choice_text'), )

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

2 个答案:

答案 0 :(得分:0)

是的,您可以使用generator function

  

生成器是可以退出并随后重新输入的函数。   他们的上下文(变量绑定)将在重新输入时保存

因此,您不仅可以区分首次运行,还可以区分每个特定的运行。像这样:

function* foo() {
  yield 'first'; //first time
  yield 'second'; //second time
  yield 'third'; //third time
}

var str = "";
for (let val of foo()) {
  str = str +" "+val;
}

console.log(str);//first second third

答案 1 :(得分:-1)

这是我上面在评论中描述的内容。请注意,可能可以使用更少的代码行来执行更高效的方法,但是出于学习的目的,我认为这是编写它的最佳方法。

var myFunction = (function(){
  let firstTime = true;
  return function trueFunction(){
    if (firstTime){
      console.log('first!');
      firstTime = false;
    } else {
      console.log("first, oh goddamnit!");
    }
  }
})()

myFunction();
myFunction();
myFunction();