<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head><body>
<!--<input type="button" value="changeI" onclick="ChangeInt()" />-->
<script language="javascript">
function classI(){
this.val=20;
}
function mymethod(obj,num){
obj.val=obj.val+5;
num=num+5;
}
var o=new classI();
var n=5;
mymethod(o,n)
//alert(o.val) 值为25
//alert(n)值为5
</script>
</body>
</html>整个过程:
1.在方法被调用前,用作实参的变量o与n已经在栈里了;
2.方法开始后,系统在栈中为形参分配空间,并从实参复制值.因为o是引用类型的,所以引用被复制(引用类型的实际数据存放在堆中,栈中存的是对实际数据的引用,指向数据在堆中的存储位置),结果实参与形参都引用堆中的同一对象,因为n是值类型,所以值被复制,产生了一个独立的数据项;
3.方法的结尾,o的字段与n都加了5;
4.方法执行后,形参被从栈中弹出;
我是按照c#中的值传递与引用传递来理解JavaScript,不知道这样理解对不对,请大家指教