问答详情
源自:4-5 [DOM事件] 抽奖系统(下)

局部变量的问题,stopFun和playFun里面都没有定义play。但为什么可以正常运行。而stop未定义的话就实现不了。

var data=['Phone5','Ipad','三星笔记本','佳能相机','惠普打印机','谢谢参与','50元充值卡','1000元超市购物券'],
    timer=null,
    flag=0;

window.onload=function(){
    var play=document.getElementById('play'),
        stop=document.getElementById('stop'),
        title=document.getElementById('title');
    // 开始抽奖
    play.onclick=playFun;
    stop.onclick=stopFun;

   // 键盘事件
    document.onkeyup=function(event){
        evevt=event||window.event;
        if(event.keyCode==13){
            if(flag==0){
                playFun();
                flag=1;
            }else{
                stopFun();
                flag=0;
            }
        }
    }
}

function playFun(){
    var stop=document.getElementById('stop');//定义stop,未定义play    clearInterval(timer);
    timer=setInterval(function(){
        var random=Math.floor(Math.random()*data.length)
        title.innerHTML=data[random];
    },50)
    play.style.background="#999";
    stop.style.background="#036";
    flag=1;
}

function stopFun(){
    var stop=document.getElementById('stop');//定义stop,未定义play
    clearInterval(timer);
    play.style.background="#036";
    stop.style.background="#999";
    flag=0;
}

提问者:harry2013 2016-08-07 10:24

个回答

  • tlojy
    2016-10-11 13:13:40

    //js可以通过元素ID直接访问元素,也可以通过document.getElementById('play')的方式访问。
    //第一种方式不推荐,不是标准里面的,将来不一定支持。
    //至于这里stop为什么获取不到,是因为js默认已经定义了一个stop()函数;
    //你可以做以下尝试:
    //1.删除id=stop的span,直接在window.onload中alert(stop),会看到stop是一个function,
    //输出的内容是:function stop(){[native code]}
    //
    window.onload=function(){
            alert(stop);
    };
    //
    //2.修改span的id为stop外的其他值,比如gstop,效果就跟play一样都能获取到。


  • ZhouJT
    2016-08-07 11:03:52

    play已经在window.onload下面声明了  属于全局变量  在任何地方都可以获取到

  • ZhouJT
    2016-08-07 10:58:58

    在函数外面变量加var表示全局变量,函数外面和里面都可以调用。而在函数里面的变量加var则表示局部变量,函数外部无法调用。