在JavaScript中,声明变量在函数内外的问题

35 阅读1分钟

项目场景:

编程语言是JavaScrip,项目是随机点名系统。

问题描述

声明一个定时器的函数,并且定时器的函数包含在一个大函数中,出现的问题:当声明的变量在大函数外和大函数内效果是不同的 st.onclick = function(){

if(bu1){

 var sel=setInterval(function(){      //问题:1.再此处声明sel   2.在st.onclick上面声明一个sel

var num1=Math.round(Math.random()*(str1.length+0-1));

str2.innerHTML=str1[num1];

},10)

st.innerHTML="点击停止";

bu1=false;

}else{

st.innerHTML = "点击开始";

clearInterval(sel);

bu1=true;

//console.log(sel);//undefined

}

}


原因分析:

在”1“处声明变量,当第一次点击onclick时,在堆里开启一个新的空间用来存储对象,按照顺序的运行,if是成立的,运行完if之后,bu1会被赋值false;当第二次点击onclick时,将会重新再堆里开辟另一个新的空间,但是bu1是false,并且不会执行if语句,直接执行else里面的内容,但是在这个新的空间里,sel并没有被声明,所以else中的clearInterval(sel)是无法执行的,sel是undefined,因此第二次点击的时候,是无法停止并且获取名字


解决方案:

把var sel定义在st.onclick上面,var sel;