关于 byval 与 byref 的区别分析总结

二者区别:
byval 传递数值,实参和形参分处不同的内存单元,互不干扰! 
byref 传递地址,实参和形参占用相同的内存单元,形参变则实参变!!!!!!
通俗理解:
byval 一去不复返 
byref 进去再出来,可能被更新!
在JavaScript中:
Boolean,Number,String型的参数是按值传递的 ==> 相当于VBS中的ByVal;
而Object型的参数(包括JS对象,Array对象,Function对象等),是按引用传递 ==> 相当于VBS中的ByRef


代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN"> 
<head> 
<title> 函数传值测试 </title> 
<meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
<meta name="author" content="枫岩,CNLEI" /> 
<meta name="copyright" content="cnlei.y.l@gmail.com , http://www.cnlei.com" /> 
</head> 
<body> 
<script type="text/javascript"> 
<!-- 
function Num(n){n=n*2;}//Number型的参数,按值传递的 ==> 相当于VBS中的ByVal; 
function Obj(){} 
Obj.prototype.show = function(o){ //JS对象,是按引用传递 ==> 相当于VBS中的ByRef 
  o.toString = function(){ 
    return("{id:"+this.id+",desc:"+this.desc+"}"); 
  } 

function Func(f){ //Function对象,是按引用传递 ==> 相当于VBS中的ByRef 
  f.show = function(o){ 
    o.toString = function(){ 
      return("{id:"+this.id+",desc:"+this.desc+",toString:function(){} }"); 
    } 
  } 
}

var N; 
N=1; 
alert(N); 
Num(N); 
alert(N);

var O; 
O = { 
  id:"001", 
  desc:"编号说明", 
  toString: function (){ 
    return null; 
  } 
}; 
var F = new Obj(); 
var F2 = new Obj(); 
alert(O.id+"\n"+O.toString()); 
F.show(O); 
alert(O.id+"\n"+O.toString()); 
Func(F); 
F.show(O); 
alert(O.id+"\n"+O.toString()); 
//--> 
</script> 
</body> 
</html>

(0)

相关推荐

  • asp中Byval与Byref的区别

    文件名称: ByVal.asp ByRef.asp 具体代码: <%Sub TestMain()Dim A : A=5Call TestBy(A)Response.write AEnd SubSub TestBy(ByVal T)T=T+1End subcall TestMain()%> <%Sub TestMain()Dim A : A=5Call TestBy(A)Response.write AEnd SubSub TestBy(ByRef T)T=T+1End subcall T

  • JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享

    对于"JavaScript 函数参数是传值(byVal)还是传址(byRef)"这个问题,普遍存在一个误区:number,string等"简单类型"是传值,Number, String, Object, Array等"复杂类型"是传址.这样不对吗?为什么会有这样的误区?看一下这两段代码: 复制代码 代码如下: //造成传值假象的代码function modifyLikeByVal(x){  x = 1;  console.log('x = %d'

  • vbs(asp) ByVal ByRef函数调用使用说明

    1.ByVal传值:一种将参数值而不是将地址传递给过程的方式,这就使过程访问到变量的复本.结果,过程不可改变变量的真正值.  2.ByRef传值:一种将参数地址而不是将值传递给过程的方式,这就使过程访问到实际的变量.结果,过程可改变变量的真正值.除非另作说明,否则按地址传递参数.   3.系统默认的是ByRef传值. 例子: 复制代码 代码如下: <SCRIPT LANGUAGE="vbScript"> dim a a=0 document.write "a=0&

  • .Net 下区别使用 ByRef/ByVal 的重要性 分享

    一直以来在 VB6 下,参数默认都是按照 ByRef  传送的,(即按地址传送) 而在 .Net(C#,VB.Net) 下, 参数默认是使用 ByVal (即按值传送)  传送的,一直没怎么注意.这些天在优化程序时发现 当传送 大变量时,使用默认方式(ByVal) 效率相当低如传入的参数变量类型 是 大字符串,数组,集合,DataSet 等测试的关键代码如下,我传入的字符串并没有特别大,变量越大,使用 ByRef 效率越高,当然,当传入得变量可以被修改或无其他作用时,可以改用 ByRef 传 复

  • ByVal和ByRef(编写ASP子程序所用到命令)

    ByVal 传送参数内存的一个拷贝给被调用者.也就是说,栈中压入的直接就是所传的值. ByRef 传送参数内存的实际地址给被调用者.也就是说,栈中压入的是实际内容的地址.被调用者可以直接更改该地址中的内容. ByVal是传递值 源数据不会被修改 你可以把这个值当作自己的局部变量来使用 ByRef是传递地址 , 源数据可能被修改 你对这个变量的操作将对你传入的那个变量产生影响,就像指针的感觉 实例: 复制代码 代码如下: sub Add1(ByVal no as int32)     no=no+

  • Asp中通过简单的例子理解下ByVal和ByRef的用法

    文件名称: ByVal.asp ByRef.asp 具体代码: <%Sub TestMain()Dim A : A=5Call TestBy(A)Response.write AEnd SubSub TestBy(ByVal T)T=T+1End subcall TestMain()%> <%Sub TestMain()Dim A : A=5Call TestBy(A)Response.write AEnd SubSub TestBy(ByRef T)T=T+1End subcall T

  • 关于 byval 与 byref 的区别分析总结

    二者区别: byval 传递数值,实参和形参分处不同的内存单元,互不干扰!  byref 传递地址,实参和形参占用相同的内存单元,形参变则实参变!!!!!! 通俗理解: byval 一去不复返  byref 进去再出来,可能被更新!在JavaScript中: Boolean,Number,String型的参数是按值传递的 ==> 相当于VBS中的ByVal; 而Object型的参数(包括JS对象,Array对象,Function对象等),是按引用传递 ==> 相当于VBS中的ByRef 复制代

  • jQuery中.attr()和.data()的区别分析

    $.attr()和$.data()本质上属于 DOM属性 和 Jquery对象属性 的区别. Jquery对象属性和DOM属性 一个简单的例子 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Jquery中.attr和.data的区别</title> </head> <body> <p id="app&q

  • C#中String与string的区别分析

    本文实例展示了C#程序设计中String与string的区别,对于C#初学者来说有很好的参考借鉴价值.具体如下: 一.区别分析: String:类,System.String string:类型,变量 两者本质上没有任何区别,都是System.String,string只是System.String的别名而已 唯一的区别在于如何按照代码约定的来写,如声明变量时使用小写string,使用System.String下方法时使用大写的String 二.示例代码如下: class Program { s

  • Android中的Dalvik和ART详解及区别分析

    要想知道Dalvik和ART区别分析,首先我们要分别知道这两者是什么? 什么是Dalvik? Dalvik是Google公司自己设计用于Android平台的虚拟机. Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一. 它可以支持已转换为 .dex格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统. Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用

  • VC中CWinThread类以及和createthread API的区别分析

    本文实例讲述了VC中CWinThread类以及和createthread API的区别分析,分享给大家供大家参考.具体分析如下: CWinThread CObject  └CCmdTarget     └CWinThread CWinThread对象代表在一个应用程序内运行的线程.运行的主线程通常由CWinApp的派生类提供:CWinApp由CWinThread派生.另外,CWinThread对象允许一给定的应用程序拥有多个线程. CWinThread支持两种线程类型:工作者线程(Worker

  • 面试题:react和vue的区别分析

    react和vue是什么?有啥区别吗? 三大框架之二,大家应该都不会陌生,都有学习过或者开发中使用. 但是他们到底有啥区别呢?这个就是我们这篇文章所需探讨并学习的. 开始! MVC 和 MVVM 首先,来说明下这些字母代表的含义 M:Model 模型 V:View 视图 C:Controller 控制器 VM:ViewModel 视图模型 首先说下MVC,大家肯定也知道三大框架中的另外一个(anuglar). 如果你写过angular那就肯定能很清楚的了解这个含义,看如下代码: <input n

  • C++ 虚函数和纯虚函数的区别分析

    首先:强调一个概念 定义一个函数为虚函数,不代表函数为不被实现的函数. 定义他为虚函数是为了允许用基类的指针来调用子类的这个函数. 定义一个函数为纯虚函数,才代表函数没有被实现. 定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数. 简介 假设我们有下面的类层次: class A { public: virtual void foo() { cout<<"A::foo() is called"<<endl; } }; cl

随机推荐