为什么不能直接用for循环的变量m?

为什么不能直接用for循环的变量m?

for (var m = 0; m < menuItenms.length; m++) {
		menuItenms[m].setAttribute("data-index",m);
		menuItenms[m].onmouseover=function(){
			submenu.className="sub-menu";
			var idx =this.getAttribute("data-index");
			// var idx =m;
			//遍历所有的子菜单,隐藏掉
			for (var j = 0; j < innerbox.length; j++) {
				innerbox[j].style.display='none';
				menuItenms[j].style.background='none';
			}
			menuItenms[idx].style.background='rgba(0,0,0,0.1)';
			innerbox[idx].style.display='block';
		}

如代码,idx改为m不行这是为什么,不是都一样吗?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕阿莹 2019-04-01 10:31:02

不同的呦,当function函数内部引用外部一个可变数值时,其引用的是这个可变数值的最终值

老师在3-6 点击圆点切换图片(1)的4分45秒到5分46秒老师有讲到哦

换个例子讲,如果没有在function中定义变量,而是在function外定变量,并不是触发这个function的时候才去对这个变量进行改变,而是在加载页面的时候,这个外部的变量就已经执行完了。

这里简单写了个案例:


<!DOCTYPE html >
 
<html>
<head>
<meta charset="">
<meta http-equiv="Content-Type" content="text/html; charset=u8" />
<title>jQuery实验室</title>
<style>
.myclass {
font-style: italic;
color: darkblue;
}
/* 高亮css类 */
.highlight {
color: red;
font-size: 30px;
background: lightblue;
}
</style>
</head>
<body>
<form id="info" action="#" method="get">
<div class="left clear-left">
<input type="submit" value="提交"  onclick="test()"/> <input type="reset" value="重置" />
</div>
</form>
</div>
</div>
<script type="text/javascript" src="js/jquery-3.3.1.js"></script>
<script type="text/javascript">
var a = 1;
function test(){ a++ ;alert(a)}
 a= 3;
</script>
</body>
</html>

这个也是同理,我们需要把它存到域中,并在function内部取出来使用。

如果我的回答解决了你的问题,请采纳,祝学习愉快.


  • 提问者 庾松 #1
    我能不能简单理解为,如果是function内使用的for循环变量,提取出来的就是for循环结束的最终变量,但是在function外就没有这个使用限制?
    2019-04-02 23:43:44
  • 好帮手慕阿莹 回复 提问者 庾松 #2
    是的,同学理解的没错。祝学习愉快
    2019-04-03 09:16:40
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师