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

In Javascript, how can I prevent the second function from running unless the first function has been invoked?

这可能以前已经介绍过,但我在网上看到的内容令人困惑,或者至少对于像我这样的初学者来说太高级了。这是一个例子....

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 = function() {
  alert("Button A has been pressed");
  funcAPressed = true;
};
var funcB = function() {
  if (funcAPressed === 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;

以下 if 语句中的代码块永远不会 运行 因为 funcA 不是布尔值,它是一个没有 return 值的函数。

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

然而,您可以做的只是声明一个用作标志的布尔值,如下所示:

(function() {

  let called = false;

  var funcA = function() {
    called = true;
    alert("Button A has been pressed");
  };
  var funcB = function() {
    if (!called) {
      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;

})();
<button id="button1">button 1</button>
<button id="button2">button 2</button>

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

document.getElementById('a').onclick = () => {
   alert("Button A has been pressed");
   document.getElementById('b').onclick = () => {alert("Button B has been pressed") };
}       
document.getElementById('b').onclick = () => { alert("press Button A") };
<button id="a">a</button>
<button id="b">b</button>

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

var count = 0;
function funcA(){
count =  1;
}
function funcB(){
if(count == 1){
alert("OKAy!")
}else{
alert("Press Button A");
}
}
<button id="a" onclick="funcA();">A</button>
<button id= "b" onclick="funcB();">B</button>

`

我想你已经得到了答案,但只是在你做的时候补充一下:

var funcA = function() {
  alert("Button A has been pressed");
}

稍后检查:

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

那么funcA就不会为false。原因是您已将函数对象分配给 funcA 变量,因此它是真实的。它并不代表 button1 是否已被较早按下的事实。 Javascript 与其他经典语言不同,因此在 javascript 中可以将函数分配给变量。希望它能帮助你更好地学习语言!