在Javascript中,如何防止第二个函数运行,除非调用了第一个函数?

在Javascript中,如何防止第二个函数运行,除非调用了第一个函数?,javascript,function,invoke,Javascript,Function,Invoke,这可能已经被讨论过了,但我在网上看到的是令人困惑的,或者至少对于像我这样的初学者来说太高级了。这里有一个例子 var funcA = function() { alert("Button A has been pressed"); }; var funcB = function() { if (funcA === false){ alert("press Button A"); } else{ alert("Button B has been pressed");

这可能已经被讨论过了,但我在网上看到的是令人困惑的,或者至少对于像我这样的初学者来说太高级了。这里有一个例子

var funcA = function() {
  alert("Button A has been pressed");
};
var funcB = function() {
  if (funcA === false){
    alert("press Button A");
  }
  else{
    alert("Button B has been pressed");
  }
};

var buttonA = document.getElementById('button1');
buttonA.onclick = funcA;
var buttonB = document.getElementById('button2');
buttonB.onclick = funcB;

如果我按任意顺序单击按钮A或按钮B,它们就会工作;但我不想让按钮B工作,除非先点击了按钮A。使用我现在的代码,funcB中的if语句永远不会运行,而else语句始终会运行。

我可能会创建一个变量,该变量将有效地充当您在运行函数a时点击的开关:

var funcAPressed=false;
var funcA=函数(){
警报(“按钮A已按下”);
funcAPressed=true;
};
var funcB=函数(){
if(funcAPressed==false){
警报(“按下按钮A”);
}
否则{
警报(“按钮B已按下”);
}
};
var buttonA=document.getElementById('button1');
buttonA.onclick=funcA;
var buttonB=document.getElementById('button2');

按钮b.onclick=funcB
由于
funcA
不是布尔值,因此以下
if
语句中的代码块永远不会运行,它是一个没有返回值的函数

if (funcA === false){
    alert("press Button A");
}
但是,您可以只声明一个用作标志的布尔值,如下所示:

(函数(){
let called=假;
var funcA=函数(){
调用=真;
警报(“按钮A已按下”);
};
var funcB=函数(){
如果(!调用){
警报(“按下按钮A”);
}否则{
警报(“按钮B已按下”);
}
};
var buttonA=document.getElementById('button1');
buttonA.onclick=funcA;
var buttonB=document.getElementById('button2');
按钮b.onclick=funcB;
})();
按钮1

按钮2
只需在按钮A的单击处理程序中更改按钮B的行为:

document.getElementById('a')。onclick=()=>{
警报(“按钮A已按下”);
document.getElementById('b').onclick=()=>{alert(“按钮b已被按下”)};
}       
document.getElementById('b').onclick=()=>{alert(“press Button A”)}
a

b
这可能很脏,但可以工作`

var计数=0;
函数funcA(){
计数=1;
}
函数funcB(){
如果(计数=1){
警惕(“好的!”)
}否则{
警报(“按下按钮A”);
}
}
A

B
我想你已经得到了答案,但当你得到答案时,我要补充一点:

var funcA = function() {
  alert("Button A has been pressed");
}
然后检查:

if (funcA === false){
    alert("press Button A");
}

那么funcA就不会是假的。原因是您已将函数对象指定给funcA变量,因此它是真实的。这并不代表按钮1是否已提前按下。Javascript不同于其他经典语言,因此在Javascript中可以将函数分配给变量。希望它能帮助你更好地学习语言

用一个布尔标志…我不会否决这个答案,但是你能解释一下这个答案要解决的问题吗?根据我自己的阅读,OP只在调用并运行了
funcA()
之后才想调用/启用
funcB()
,这个答案似乎没有解决。我想在这里解释的是,为什么他对自己编写的代码的期望是错误的。这是为了帮助他理解问题的根本原因。我明白你的意思,funcA不能是假的,因为我声明并定义了一个变量。因此它存在。对吗?我最终同意了Jeremy的建议,这是最简单的建议,也是我能理解的:我在全局范围内声明var funcAPressed=false。因此,除非另有说明,否则funcAPressed始终为假。但是当调用funcA时,funcAPressed=true会发生…使其成为true。funcB中的if语句仅在funcAPressed=false时运行。我可能解释错了,但这是我理解并能够实现的。我最终还是接受了这个建议。我基本上是说var funcAPressed=false。除非另有声明,否则情况将如此。当funcA运行时,它现在将funcAPressed声明为true。如果funcAPressed为false(默认情况下为false),则会运行funcB中的If语句。但是如果funcAPressed变为true(在调用funcA之后发生),则func B中的else语句将运行。