知识大全 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函数

常用的Javascript函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  /********

知识大全 javascript读写Cookie函数

javascript读写Cookie函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  日前看到

知识大全 判断Javascript 是否存在函数

判断Javascript是否存在函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  window

知识大全 使用Javascript的数学函数

使用Javascript的数学函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在JavaScri

知识大全 Applet调用JavaScript函数

Applet调用JavaScript函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在做的的

知识大全 几个很有用的javascript函数

函数Reset()按Reset按钮后对各字段的内容复位  函数submitForms()按submit按钮后对字段合法性检查后发送电子邮件  函数isName()对姓名字段进行合法性检查  函数isE

知识大全 Javascript日期格式化函数性能对比

Javascript日期格式化函数性能对比  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  最近开