循环对象时,有关switch的一些疑惑

molaifeng
博客专家认证
2012-10-30 11:38:19
在看看js相关资料时,改写了一个相关的代码,可是在运行的结果上却纠结了


var human = {};
for(human.age=1;human.age<4;human.age++) {
switch(human.age) {
case 1:
human.like = '小屁孩';
human.say = function () {alert(this.age+','+this.like)};
break;
case 5:
human.like = '小毛孩';
human.say = function () {alert(this.age+','+this.like)};
break;
case 6:
human.like = '小孩';
human.say = function () {alert(this.age+','+this.like)};
break;
}
human.say();
alert(human.age); //调试
}


我的理解为,上述的代码,只会显示一次,也就是弹出 小屁孩,1。可结果却是弹出三次,并且后面的数字依次增加,我就不明白了,难道我的switch语句理解有误,不是switch里的值为多少,就执行里面相关的case对应的值,可human.age在第一次运行后已经不是1了,为什么还是可以执行case 1相关的内容呢???
...全文
112 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
molaifeng 2012-10-30
  • 打赏
  • 举报
回复
对对对,我明白了,我陷入了思维误区,把重点都放在switch里了,没有留心say方法,不应该啊。谢谢楼上的回答!!!
scscms太阳光 2012-10-30
  • 打赏
  • 举报
回复
    var human = {};
for(human.age=1;human.age<4;human.age++) {
switch(human.age) {
case 1:
human.like = '小屁孩';
alert(human.age+','+human.like);
break;
case 5:
human.like = '小毛孩';
alert(human.age+','+human.like);
break;
case 6:
human.like = '小孩';
alert(human.age+','+human.like);
break;
}
}
这才是你希望的
  • 打赏
  • 举报
回复
解释

human.age = 1时
执行human.like = '小屁孩';
human.say = function () {alert(this.age+','+this.like)};这两句
也就是给human对象赋值
接下来执行human.say();
alert(human.age);这两句
输出"小屁孩"和"1"
然后执行human.age++这句
这时human.age = 2
不满足switch语句条件,再执行后面的
human.say();
alert(human.age);
输出"小屁孩"和"2"
同理,输出"小屁孩"和"3"
scscms太阳光 2012-10-30
  • 打赏
  • 举报
回复
for(
human.age=1时 已经注册了human.say();虽然后面human.age=2,3时不符合条件,但同样执行前面注册的human.say();所以三次都是 '小屁孩'

87,915

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧