0

我对 javascript 很陌生,我从编写一个小脚本的简单任务开始。我希望通过单击切换按钮来显示字符串...

<!DOCTYPE html>
<html>
<body>


<button onclick="foo()">Foo</button>
<button onclick="toggle()">Toogle</button>
<p id="demo"></p>


<script>
     var toggle = false;//set the desired initial value to toggle flag
     var x = "";

     function toggle() {
         alert("ENTERED Toggle");
         toggle = !toggle;
         x= toggle? "Toggle set to true. " : "";
     }

     function foo() {`enter code here`
         alert("ENTERED Foo");
         var y = "Food pressed";
         y = x + y;
        document.getElementById("demo").innerHTML=y; // display the x value
     }
</script>

</body>
</html>

预期:当仅单击 foo 时,会显示警报框并单击“确定”只是简单的“Foo 已按下”。应显示。当单击一次切换然后单击 foo 时,将显示“切换设置为 true。Foo 已按下”{两个警报出现在此过程中},然后再次第二次按下切换并按下 foo,切换标志为切换并且只有“Foo press”。显示出来,它遵循这样......

实际结果:只有 foo click 有效,而 toggle click 根本无效。

有人可以对此有所了解吗?

4

1 回答 1

2

你有冲突的名字。该toggle函数替换toggle变量。这是因为在 ECMAScript (Javascript) 中,可以通过不添加括号来传递函数,也就是说函数是一等公民

一个例子:

x = alert; //"x" is now the same function as "alert"
x("Hej");

因此,您对toggle函数的定义等同于此分配:

var toggle = function() {
  alert("ENTERED Toggle");
  toggle = !toggle;
  x= toggle? "Toggle set to true. " : "";
}

解决方案是为函数或变量指定另一个名称。

于 2013-04-16T12:38:58.027 回答