首页 新闻 会员 周边 捐助

一个javascript变量域的问题

0
悬赏园豆:50 [已解决问题] 解决于 2009-09-01 16:47

;是alert(cc),不知道为什么显示不出来

<script language="javascript">
    function aa(bb){
        bb ++;
    }
    function zz(){
        var cc = 1;
        aa(cc);
        alert(cc);
    }
    zz();
</script>

弹出来的是1,意料之中

<script language="javascript">
    function aa(bb){
        bb.setDate(bb.getDate() + 1);
    }

    function zz(){
        var cc = new Date();
        aa(cc);
        alert(cc);
    }
    zz();
</script>

这个为什么cc会加上一天呢?

问题补充: 那请问怎么不引用值呢,不想改变他本来的值 我在function里面用var申明变量了啊,就是局部变量,应该不会改变他的值的,从第一个例子便可以证明,那为什么第二个例子却会改变局部变量的值呢?
asp.net初学者的主页 asp.net初学者 | 初学一级 | 园豆:125
提问于:2009-09-01 15:22
< >
分享
最佳答案
1

关键在与你的 var cc = new Date();这句话,这句话看似确实是定义了一个局部变量cc,但事实并非如此;事实是这里定义的CC是一个日期对象实例。为说明这一点,你可以用typeof(cc)检查下类型,你会发现这里返回的是object类型。因此答案也就明了了。这里既然是object类型了,那此处调用的aa这个方法,这就和咋们经常使用的高级语言传递一个对象实例是一样的意思了(也就是2楼写的那个代码了)

后话:你也可以去检查下你alert出1的代码,他返回的应该是值类型,而并非object类型。

收获园豆:40
西越泽 | 专家六级 |园豆:10775 | 2009-09-01 16:26
确实是这个原因。解决方法只能用歪点子了,每次调用完在减回来,不知道还有没有更好的方法。
asp.net初学者 | 园豆:125 (初学一级) | 2009-09-01 16:50
其他回答(2)
0

因为那是一个引用值

收获园豆:5
cloudgamer | 园豆:280 (菜鸟二级) | 2009-09-01 15:36
0

  bb.setDate(bb.getDate() + 1);..这里不是加了一吗?...

你的代码就是这个意思啊

  var cc = new Date();
 cc.setDate(cc.getDate() + 1);

收获园豆:5
邢少 | 园豆:10926 (专家六级) | 2009-09-01 15:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册