function f4() { ar[0] = "changed at f4";} var ar = new Array(1); ar[0]="this is a string."; f4(ar[0]); document.write(ar[0]," <br/>"); </script> 在你的方法里给这个全局变量赋值是可以的
var ar = new Date(); 这样是可以的,传入的参数是当引用的话就用改变的
2楼的连参数都没了,本来就是传参数, C++里 f4(&ar) 就会改变的
function f4(name){ name = "changed at f4";} 这句要怎么理解?我怎么感觉是给局部变量name赋一个changed at f4的字符串啊...
<script type="text/javascript"> function f4(name){ name[0] = "changed at f4";} var ar = new Array(1); ar[0]="this is a string."; f4(ar); document.write(ar[0]," <br/>"); </script>
LS的确实能改,不过有些晕了,JS到底是值传递还是引用传递啊? LZ说日期能改,但我这样试了下,就是把一个日期给了一个局部变量,全局变量的日期还是没改啊。<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>test</title> <script type="text/javascript"> function f4(name){ name = new Date(75, 1, 16); alert(name); } var ar = new Date(); f4(ar); document.write(ar," <br/>"); </script> </head> <body> </body> </html>
其实就是这样 function f4(name){ name = "changed at f4";} 用户传值的name,与方法内的name不是同一个对象,此句可以更改为: function f4(name){ var name=name; name = "changed at f4";} 效果与楼上同
这不是Array的问题,而是引用和值类型的问题。在JavaScript中,String是值类型,不是引用类型,所以这么写你的f4中相当于执行了 "this is a stirng" = "changed at f4" 这是没有意义的。如果要完成这样的效果,要改写成引用类型,即把数组元素写成对象: 给你一个参考的方式,你也可以用别的方法来实现: <script type="text/javascript">function f4(obj){ obj.text = "f4";}var ar = new Array(1); ar[0]={text:"string"}; f4(ar[0]); document.write(ar[0].text," <br/>");</script>
楼主传的是arr[0]的值 加个alert就明白了 <script type="text/javascript"> function f4(name){ alert(name); // this is a string. name = "changed at f4"; //这里其实是 'this is a string.' = "changed at f4" 和ar没关系 } var ar = new Array(1); ar[0]="this is a string."; f4(ar[0]); // 这里其实是 f4("this is a string."); document.write(ar[0]," <br/>"); </script>
但是如果参数是对象,传的好像就是引用了; 试一下就知道了,好像除了Object,其他都是值传递; <script type="text/javascript"> function f4(name){alert(typeof(name)); name.a="2";} //function f4(name){alert(typeof(name)); name="2";} var obj = new Object(); obj.a = "1"; f4(obj); //f4(obj.a); document.write(obj.a," <br/>"); </script>
{
ar[0] = "changed at f4";} var ar = new Array(1);
ar[0]="this is a string.";
f4(ar[0]);
document.write(ar[0]," <br/>"); </script>
在你的方法里给这个全局变量赋值是可以的
这样是可以的,传入的参数是当引用的话就用改变的
C++里 f4(&ar) 就会改变的
这句要怎么理解?我怎么感觉是给局部变量name赋一个changed at f4的字符串啊...
ar[0]="this is a string.";
f4(ar);
document.write(ar[0]," <br/>"); </script>
LZ说日期能改,但我这样试了下,就是把一个日期给了一个局部变量,全局变量的日期还是没改啊。<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test</title>
<script type="text/javascript"> function f4(name){
name = new Date(75, 1, 16);
alert(name);
} var ar = new Date(); f4(ar);
document.write(ar," <br/>"); </script>
</head>
<body>
</body>
</html>
function f4(name){ name = "changed at f4";}
用户传值的name,与方法内的name不是同一个对象,此句可以更改为:
function f4(name){ var name=name; name = "changed at f4";}
效果与楼上同
给你一个参考的方式,你也可以用别的方法来实现:
<script type="text/javascript">function f4(obj){ obj.text = "f4";}var ar = new Array(1);
ar[0]={text:"string"};
f4(ar[0]);
document.write(ar[0].text," <br/>");</script>
加个alert就明白了
<script type="text/javascript"> function f4(name){
alert(name); // this is a string.
name = "changed at f4"; //这里其实是 'this is a string.' = "changed at f4" 和ar没关系
} var ar = new Array(1);
ar[0]="this is a string.";
f4(ar[0]); // 这里其实是 f4("this is a string.");
document.write(ar[0]," <br/>");
</script>
试一下就知道了,好像除了Object,其他都是值传递;
<script type="text/javascript"> function f4(name){alert(typeof(name)); name.a="2";}
//function f4(name){alert(typeof(name)); name="2";}
var obj = new Object();
obj.a = "1";
f4(obj);
//f4(obj.a);
document.write(obj.a," <br/>"); </script>