search

Home  >  Q&A  >  body text

javascript - ture和false的关系

我下面page2点击后btn应该是false啊,可为什么if括号里的btn还是true,怎么让他变成false

            var btn=true;

            if (btn) {
                alert(btn);
                var timer = setInterval(function() {
                    Push(num);
                }, 500);

            }

            $(".page2").click(function(){
                btn=false;
            });
高洛峰高洛峰2817 days ago459

reply all(4)I'll reply

  • 迷茫

    迷茫2017-04-10 15:01:16

    1. 顺序执行, 所以你能看到alert(btn)结果为true 这是无误的。
    2. 在你点击.page2后 btn已经被赋值false了 这个也是无误的,但是你的计时器已经开始执行了,他只会沿着function() { Push(num); }的内容继续执行,你可能疑惑的是这个。接着看。
    3. 争取方法应该是使用函数clearInterval来停止这个timer
    <!DOCTYPE html>
    <html>
    <head>
        <title>1010000002595041</title>
        <script type="text/javascript" src="https://code.jquery.com/jquery-latest.min.js"></script>
        <script type="text/javascript">
        $(document).ready(function(){ 
            var btn=true;
            if (btn) {
                alert(btn);
                var num = 0;
                var timer = setInterval(function() {
                    console.log(num++);
                }, 500);
            }
            $(".page2").click(function(){
                btn=false;
                console.log("clicked");
                alert(btn);
                clearInterval(timer);
                console.log("timer stop");
            });
        }); 
        </script>
    </head>
    <body>
    <button class="page2">click</button>
    </body>
    </html>
    
    

    reply
    0
  • 迷茫

    迷茫2017-04-10 15:01:16

    if括号里的btn在你执行click事件之前已经写死了啊, alert的时候肯定为true

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 15:01:16

    .page2 里面的callback在你点击的时候才会执行吧,之前alert的时候当然是true啦

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 15:01:16

    能不能把代码贴全?

    reply
    0
  • Cancelreply