我有一个项目,每个功能都像模块一样完全独立。
这意味着我可以将此函数复制到另一个项目中,并且一切正常。
但是,在某些情况下,如果它们是第一次运行或以前已经运行过,则其中一个功能的行为会有所不同。
就目前而言,我发现实现此目标的唯一方法是使用外部布尔值,就像这样,我想避免这种情况:
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中是否有某种方法可以在“独立” 函数中实现相同的功能?
答案 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();