Boolean型变量声明在匿名函数内和声明在匿名函数外的作用域分别是什么

Boolean型变量声明在匿名函数内和声明在匿名函数外的作用域分别是什么

问题描述:


<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <img src="../图片/Date方法.jpg" alt="" id="img1" />
  </body>
</html>
  <script>
      var oimg = document.getElementById("img1");
      var bool = true;
      oimg.onclick = function () {
        if (bool) {
          oimg.src = "../图片/javascript事件表.jpg";
          bool = false;
        } else {
          oimg.src = "../图片/Date方法.jpg";
          bool = true;
        }
      };
    </script>

这是通过改变src属性切换图片的代码。为了图片可以来回切换,声明一个bool变量来控制切换。但是变量bool声明在匿名函数内的时候图片只会切换一次,声明在函数外却可以实现想要的效果。为什么在匿名函数内声明一个只在该函数内部使用的变量却出了问题呢?希望大家帮助解释一下变量声明的作用域问题。(为什么禁用qian bei和da niu词汇)

放在内部每次执行都会初始化为true,所以只会执行第一个if判断。放外部就可以切换值了