今天碰到一个问题,怎样把参数变更影响到函数外部,如:
<script> var myname = "wood"; A(myname); document.write(myname); function A(n) { n = "Yao"; } </script>
输出结果还是wood,说明当myname传入A函数后,在函数体内,相当于有一个myname的副本,这个副本的值等于myname,之后在函数体内对其做的操作是在这个副本上进行的。
但情况有所不同,当传入的参数是 数组 、 对象 时,在函数体内对参数所做的更改会反映到原变量上。
<script> var myname = ["wood"]; A(myname); document.write(myname[0]); function A(n) { n[0] = "Yao"; } </script>
可以看出,上面代码中已经把friut数组的第一个元素更改了。
下面是关于对象的例子:
<script> var myname = {name1:"wood"}; A(myname); document.write(myname.name1); function A(n) { n.name1 = "Yao"; } </script>
可以很明显地看到函数体内对参数的改动影响到了原来的变量,这与通常情况下的传参有质的区别了。需要特别注意。
But,当在函数体内对传入的数组或对象赋值时,这个更改不会反映到函数体外的原变量身上!
请看:
<script> var myname = {name1:"wood"}; A(myname); document.write(myname.name1); function A(n) { n = {name1:"Yao"}; } </script>
按照上面函数内部的更改会反映到原变量的理论,你肯定觉得执行完A()后myname变量的name1属性的值已经变成'Yao'了吧。但结果让人有点难以接受。
原因在于,当在函数体内使用赋值操作时,系统就创建了一个变量名为p的变量。这个p是函数内部的变量,对它进行赋值当然只在函数体内起作用,外面的myname还是原来的myname。
这一步与原来代码的操作差别仅在于在 函数体内是对参数赋新值呢还是对参数的属性或数组的元素进行更改 。
下面我们用传递对象的方式,重新实现一个时钟数字格式化输出的例子:
<script> var mytime = self.setInterval(function() { getTime(); }, 1000); //alert("ok"); function getTime() { var timer = new Date(); var t = { h: timer.getHours(), m: timer.getMinutes(), s: timer.getSeconds() } //将时间对象t,传入函数checkTime(),直接在checkTime()中改变对象中的值。 //而无需再去接收返回值再赋值 checkTime(t); document.getElementById("timer").innerHTML = t.h + ":" + t.m + ":" + t.s; } function checkTime(i) { if (i.h < 10) { i.h = "0" + i.h; } if (i.m < 10) { i.m = "0" + i.m; } if (i.s < 10) { i.s = "0" + i.s; } } </script>
例子使用setInterval()函数定时调用刷新事件,也可以用setTimeout()在getTime()中递归调用来实现。
以上就是本文的全部内容,希望对大家学习javascript程序设计有所帮助。
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com
暂无评论...
更新日志
2024年09月20日
2024年09月20日
- 魏新雨《为你祈祷+新歌精逊2CD[WAV]
- 影心、明萨拉你选哪个?国外美女COS《博德3》
- 澳洲女子骑车跌入“自杀树”丛 疼痛持续9个月崩溃
- 育碧公布2024“她创力”计划:为女性游戏人提供辅导
- 刘美君.2017-千色·30总选3CD【环球】【WAV+CUE】
- 群星.2022-星河长明电视原声带【乐有奇思】【FLAC分轨】
- 陈淑桦.1995-淑桦盛开Forever【滚石】【WAV+CUE】
- 《再来一张》评测:出师成败皆系“赌”
- 《银河汉堡店》测评:我是银河走菜王!
- 《末日地带2》评测:酣畅淋漓的“和面”之旅
- 萧煌奇《没事的》[320K/MP3][96.22MB]
- 萧煌奇《没事的》[FLAC/分轨][263.38MB]
- 群星《音你而来 第6期》[320K/MP3][90.61MB]
- 交错战线爬塔攻略一览
- 战锤40K星际战士2全近战武器使用教学|近战武器连招表