在看看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相关的内容呢???

解决方案 »

  1.   

    for(
    human.age=1时 已经注册了human.say();虽然后面human.age=2,3时不符合条件,但同样执行前面注册的human.say();所以三次都是 '小屁孩'
      

  2.   

    解释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"
      

  3.   

        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;
            }
        }这才是你希望的
      

  4.   

    对对对,我明白了,我陷入了思维误区,把重点都放在switch里了,没有留心say方法,不应该啊。谢谢楼上的回答!!!