關(guān)于 byval 與 byref 的區(qū)別分析總結(jié)
更新時間:2007年10月08日 16:37:22 作者:
二者區(qū)別:
byval 傳遞數(shù)值,實參和形參分處不同的內(nèi)存單元,互不干擾!
byref 傳遞地址,實參和形參占用相同的內(nèi)存單元,形參變則實參變?。。。。?!
通俗理解:
byval 一去不復返
byref 進去再出來,可能被更新!
在JavaScript中:
Boolean,Number,String型的參數(shù)是按值傳遞的 ==> 相當于VBS中的ByVal;
而Object型的參數(shù)(包括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> 函數(shù)傳值測試 </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型的參數(shù),按值傳遞的 ==> 相當于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>
byval 傳遞數(shù)值,實參和形參分處不同的內(nèi)存單元,互不干擾!
byref 傳遞地址,實參和形參占用相同的內(nèi)存單元,形參變則實參變?。。。。?!
通俗理解:
byval 一去不復返
byref 進去再出來,可能被更新!
在JavaScript中:
Boolean,Number,String型的參數(shù)是按值傳遞的 ==> 相當于VBS中的ByVal;
而Object型的參數(shù)(包括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> 函數(shù)傳值測試 </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型的參數(shù),按值傳遞的 ==> 相當于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>
相關(guān)文章
深入理解JavaScript中的尾調(diào)用(Tail Call)
尾調(diào)用(Tail Call)是函數(shù)式編程的一個重要概念,下面這篇文章主要給大家深入的介紹了關(guān)于JavaScript中尾調(diào)用的相關(guān)資料,文中介紹的非常詳細,相信對大家具有一定的參考價值,有需要的朋友們下面來一起看看吧。2017-02-02laydate只顯示時分 不顯示秒的功能實現(xiàn)方法
今天小編就為大家分享一篇laydate只顯示時分 不顯示秒的功能實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09JavaScript中call、apply、bind實現(xiàn)原理詳解
其實在很多文章都會寫call,apply,bind,但個人覺著如果不弄懂原理,是很難理解透的,所以這篇文章主要介紹了JavaScript中call、apply、bind實現(xiàn)原理的相關(guān)資料,需要的朋友可以參考下2021-06-06在 javascript 中如何快速獲取數(shù)組指定位置的元素
這篇文章主要介紹了在 javascript 中快速獲取數(shù)組指定位置的元素,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04基于JS實現(xiàn)PHP的sprintf函數(shù)實例
這篇文章主要介紹了基于JS實現(xiàn)PHP的sprintf函數(shù)的方法,可實現(xiàn)JavaScript模擬PHPsprintf函數(shù)的輸出功能,涉及JavaScript字符串操作的相關(guān)技巧,需要的朋友可以參考下2015-11-11