JS函数参数的传递与同名参数实例分析
本文实例讲述了JS函数参数的传递与同名参数。分享给大家供大家参考,具体如下:
函数参数的传递
函数参数如果是原始类型值,传递方式是值传递。这意味着,在函数体内修改参数值,不会影响函数外部。
varp=2 functionf(p){ p=3 } f(p) p//2
上面代码中,变量p是一个原始类型的值,传入函数f的方式是值传递,因此在函数内部,p的值是原始值的拷贝,无论怎么修改,都不会影响到原始值。
但是,如果函数参数是复合类型,传入函数的方式是引用的传递,也就是说,传入函数的是一个地址,因此在函数内部修改参数,将会影响到原始值。
varobj={p:1}; functionf(o){ o.p=2; } f(obj); obj.p//2
上面代码中,传入函数f的参数对象obj的地址。因此,在函数内部修改obj的属性p,会影响到原始值。
注意,如果函数内部修改的,不是参数对象的某个属性,而是替换掉整个参数,这时不会影响到原始值。
varobj=[1,2,3]; functionf(o){ o=[2,3,4]; } f(obj); obj//[1,2,3]
上面代码中,在函数f内部,参数对象obj被整个替换成另一个值。这时不会影响到原始值。这是因为,形式参数(o)的值实际是参数obj的地址,重新对o赋值,导致o指向另一个地址,保存在原地址上的值当然不受影响。
函数中的同名参数
如果函数中出现了同名参数,则取最后出现的那个值
functionf(a,a){ console.log(a); } f(1,2)//2
上面代码中,函数f有两个参数,且参数名都为a,取值的时候,以后面的a为准,即使后面的a没有值,或者被省略,也是以其为准。
functionf(a,a){ console.log(a); } f(1)//undefined
调用函数f的时候,没有提供第二个参数,a的取值就变成了undefined。这时,如果要获得第一个a的值,可以使用arguments对象。
functionf(a,a){ console.log(arguments[0]); } f(1)//1
感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun测试上述代码运行效果。
更多关于JavaScript相关内容可查看本站专题:《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。