知识大全 JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享
Posted 指针
篇首语:宁给穷人一斗,不给富人一口。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享相关的知识,希望对你有一定的参考价值。
JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
对于“JavaScript 函数参数是传值(byVal)还是传址(byRef)”这个问题 普遍存在一个误区 number string等“简单类型”是传值 Number String Object Array等“复杂类型”是传址 这样不对吗?为什么会有这样的误区?看一下这两段代码
复制代码 代码如下: //造成传值假象的代码 function modifyLikeByVal(x) x = ; console log( x = %d x); var x = ; console log( x = %d x); // 输出 x = modifyLikeByVal(x); // 输出 x = console log( x = %d x); // 输出 x = x没变! 复制代码 代码如下: //造成传址假象的代码 function modifyLikeByRef(x) x[ ] = ; x[ ] = ; x[ ] = ; console log( x = [ %s ] x join( )); var x = [ ]; console log( x = [ %s ] x join( )); // 输出 x = [ ] modifyLikeByRef(x); // 输出 x = [ ] console log( x = [ %s ] x join( )); // 输出 x = [ ] x变了!于是 由以上代码得出结论 “简单类型”作为参数是传值(byVal)的 “复杂类型”作为参数是传址(byRef)的
问题出在哪呢?
仔细观察两个函数 就可以发现一点 在byVal中 是直接修改了参数x x = ; 而byRef中 是修改参数x的成员 x[ ] = ; x[ ] = ; x[ ] = ;
本人由此得出猜想 在JavaScript中 所有的变量或成员 都是一个指针 在修改变量或成员值的时候 其实是修改了该指针的地址
这样上面的代码就可以得到解释了
在“byVal”中
复制代码 代码如下: global // 表示全局作用域 下面的表示函数作用域 var x = ; // 初始化指针x并指向数字 fun(x) x = global x; // 传入参数global x; fun域的x指针地址与global域的x指针地址一样指向数字 x = ; // 修改fun域的x指针地址 指向数字 // fun 域结束 global域中的x指针没改变在“byRef”中
复制代码 代码如下: global // 表示全局作用域 下面的表示函数作用域 /* 初始化指针x并指向数组[ ] 其实是x的三个成员 分别指向 */ var x = [ ]; fun(x) x = global x; // 传入参数global x; fun域的x指针地址与global域的x指针地址一样指向数组[ ] /* 在fun域中的x没有再被改变 紧接着修改fun域中的x(也就是global x)三个成员指针的指向 */ x[ ] = ; x[ ] = ; x[ ] = ; // fun 域结束 global域中的x指针没改变 但其三个成员指针被改变了 于是就看到我们输出的结果那这段代码怎么解释呢???
复制代码 代码如下: (function(a b) arguments[ ] = ; b = ; console log(arguments a b); )( );只能说a b 是arguments[ ] [n]的别名了
如果有不对的地方 请指出来 谢谢
cha138/Article/program/Java/JSP/201311/20108相关参考
知识大全 JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一
<SCRIPTID=clientEventHandlersJSLANGUAGE=javascript>//函数名csafe//功能介绍检查是否含有\\\\///参数说明要检查的字符串//返
知识大全 JavaScript:new 一个函数和直接调用函数的区别分析
JavaScript:new一个函数和直接调用函数的区别分析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看
常用的Javascript函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! /********
javascript读写Cookie函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 日前看到
判断Javascript是否存在函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! window
使用Javascript的数学函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在JavaScri
Applet调用JavaScript函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在做的的
函数Reset()按Reset按钮后对各字段的内容复位 函数submitForms()按submit按钮后对字段合法性检查后发送电子邮件 函数isName()对姓名字段进行合法性检查 函数isE
Javascript日期格式化函数性能对比 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 最近开