为了账号安全,请及时绑定邮箱和手机立即绑定

关于局部变量的问题

var data=['Phone5','Ipad','三星笔记本','佳能相机','谢谢参与','200元购物券','50元话费','再来一次'],
	timer=null;

window.onload=function(){
	var play=document.getElementById('play'),
		stop=document.getElementById('stop'),
 title=document.getElementById('title');
	play.onclick=playFun;
}

function playFun(){
	
		//var that=this;/*this指paly这个按钮*/
	clearInterval(timer);/*清除定时器,防止多次启动*/
	timer=setInterval(function(){
		var random=Math.floor(Math.random()*data.length);
		title.innerHTML=data[random];
		//console.log(random);/*用来调试*/
	},75);
	play.style.background="#999";
}

window.onload里定义的变量应该是局部变量,老师在视频前半部分也说过,所以她把变量写在了需要用这个变量的函数里。但是,我刚才尝试把这个局部变量变成全局变量,结果发现这个局部变量可以在其他函数里使用,这是为什么?

正在回答

3 回答

window.onload 中定义的是 window.onload 函数的 局部变量 其他的函数无法使用  

所以要重新定义 局部变量

1 回复 有任何疑惑可以回复我~
#1

苍白的尾巴 提问者

你和上一个人说的相反,哪个对?
2016-06-13 回复 有任何疑惑可以回复我~
#2

D__0 回复 苍白的尾巴 提问者

运行代码试试看就知道谁对谁错了
2016-06-23 回复 有任何疑惑可以回复我~
#3

苍白的尾巴 提问者

非常感谢!我找了一下,你说得对
2016-06-23 回复 有任何疑惑可以回复我~
#4

香宝的夫差

按理说,在最外围定义所有变量 其余函数会向上寻找。即在data后边定义。 尝试了一下,好像不可以。为何?
2017-07-01 回复 有任何疑惑可以回复我~
#5

香宝的夫差 回复 香宝的夫差

明白了。。。
2017-07-01 回复 有任何疑惑可以回复我~
查看2条回复

你可以这么理解一下吧,首先,把变量定义在函数里,那个是函数里的局部变量,如果你把这个变量提出,在window.onload外声明,那么这个是全局变量,但是根据代码由上到下运行,body里的代码未运行就先执行了全局变量的document.getElementById,这样应该取不到值吧,个人见解,不正确请告诉我。

0 回复 有任何疑惑可以回复我~

写在函数里面的变量是局部变量(只在函数中起作用)

window.onload中定义的是全局变量,其它函数可以引用  

0 回复 有任何疑惑可以回复我~
#1

苍白的尾巴 提问者

那老师的代码为什么要在其他函数里重复的定义play=document.getElementById('play');这句话呢?
2016-05-29 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

关于局部变量的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信