首页 新闻 会员 周边 捐助

JS参数传递只能是按值吗?

0
悬赏园豆:200 [已解决问题] 解决于 2012-07-31 15:14

下面是我看到的js参数传递的方法,其中说js只有按值传递

 

以上是我在《javascript高级程序设计》中看到的。然后我用C#写了下面这段代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace refTest
{
  
    class Program
    {
        static void SomeFunction(int[] ints, int i)
        {
            ints[0] = 100;
            ints = new int[] { 3, 4, 5, 9, 8 };
            i = 100;
        }
       
        static void Main(string[] args)
        {
            int i = 0;
            int[] ints = { 0, 1, 2, 4, 8 };
            Console.WriteLine("i = " + i);
            Console.WriteLine("ints[0] = " + ints[0]);
            Console.WriteLine("Call SomeFunction.");

            SomeFunction(ints, i);
            Console.WriteLine("i = " + i);
            Console.WriteLine("ints[0] = " + ints[0]);
        }
    }
}

 

结果发现和JS中的情形是一样的,难道C#的引用类型不是按引用传递的吗?

jsyzbyddy的主页 jsyzbyddy | 初学一级 | 园豆:22
提问于:2012-07-30 10:13
< >
分享
最佳答案
0

建议你看看这篇文章:深入理解JavaScript系列(19):求值策略(Evaluation strategy)

JS和C#用的都是引用传递,即传递的是引用的拷贝(地址副本),这就导致了函数内部给参数重新赋新值不会影响到外部的对象,但是因为该参数是一个地址拷贝,所以在外面访问和里面访问的都是同一个对象,改变该参数对象的属性值将会影响到外部的对象。

C#中的可以参考MSDN:http://msdn.microsoft.com/zh-cn/library/s6938f28(v=vs.100).aspx

收获园豆:200
artwl | 专家六级 |园豆:16736 | 2012-07-30 11:59

照你的意思就是上面的JS书中说的是错的了?

jsyzbyddy | 园豆:22 (初学一级) | 2012-07-30 15:51

@jsyzbyddy: 不是,引用传递本质就是值传递

artwl | 园豆:16736 (专家六级) | 2012-07-30 15:52

@jsyzbyddy:  个人补上 引用类型 是特殊的值类型。   

Mundo Novo | 园豆:69 (初学一级) | 2012-07-30 16:58
其他回答(5)
0

最讨厌纠结中文的表达的一些概念了,多少人绕不出来啊。

你可以尝试在c#中写第二个示例,结果是不成立的,是有区别的。

today4king | 园豆:3499 (老鸟四级) | 2012-07-30 10:21

不能回答我的问题就不要回答,什么叫“最讨厌”?你的态度有问题。

支持(0) 反对(0) jsyzbyddy | 园豆:22 (初学一级) | 2012-07-30 10:26

@jsyzbyddy: 对不起,你误解了,我意思是书中中文在表达的时候会造成阅读者的困扰。

支持(1) 反对(0) today4king | 园豆:3499 (老鸟四级) | 2012-07-30 11:14
0

引用传递本质就是值传递.他的意思是说JS没有REF,OUT这种传递方式

56180825 | 园豆:1749 (小虾三级) | 2012-07-30 10:30
0

在C#中,无论值类型还是引用类型,传递的都是参数变量的值。值类型的参数,它的值就是实际的数据。引用类型的参数,它的值是一个引用,这个引用指向堆上的数据。

 

水牛刀刀 | 园豆:6350 (大侠五级) | 2012-07-30 11:16
1

ints = new int[] { 3, 4, 5, 9, 8 };

你这个引用地址变了

Tom.汤 | 园豆:3051 (老鸟四级) | 2012-07-30 13:09

是的。上面的JS的例子也是这么干 的。

支持(0) 反对(0) jsyzbyddy | 园豆:22 (初学一级) | 2012-07-30 15:50
0

嗯。。打酱油来的

Rookier | 园豆:652 (小虾三级) | 2012-07-30 17:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册