问题标签 [pass-by-value]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
12 回答
166230 浏览

java - 为什么要在 Java 中的方法参数上使用关键字“final”?

我不明白在方法参数上使用final关键字时真正方便的地方。

如果我们排除匿名类的使用、可读性和意图声明,那么对我来说几乎毫无价值。

强制某些数据保持不变并不像看起来那么强大。

  • 如果参数是原始参数,那么它将不起作用,因为参数作为值传递给方法并且更改它不会在范围之外产生任何影响。

  • 如果我们通过引用传递参数,那么引用本身就是一个局部变量,如果引用是从方法内部更改的,那么从方法范围之外不会有任何影响。

考虑下面的简单测试示例。尽管该方法更改了给它的引用的值,但该测试通过了,但没有任何效果。

0 投票
15 回答
1344 浏览

java - 有人可以向我解释在 Java 中通过“值”而不是“引用”传递的原因是什么?

我对Java相当陌生(多年来一直在写其他东西),除非我遗漏了什么(我很高兴在这里犯错),否则以下是一个致命的缺陷......

现在,我很清楚(措辞相当糟糕的)概念,即在 java 中,所有内容都是通过“值”而不是“引用”传递的,但是 String 是一个对象,并且有各种各样的花里胡哨,所以,人们会期待与 int 不同,用户将能够对传递给方法的内容进行操作(并且不会被重载 = 设置的值所困扰)。

有人可以向我解释这种设计选择背后的原因是什么吗?正如我所说,我不想待在这里,也许我错过了一些明显的东西?

0 投票
33 回答
461204 浏览

javascript - JavaScript 是按引用传递还是按值传递语言?

原始类型(数字、字符串等)按值传递,但对象是未知的,因为它们都可以按值传递(如果我们认为持有对象的变量实际上是对对象的引用) 和通过引用传递(当我们认为对象的变量包含对象本身时)。

尽管最后并不重要,但我想知道呈现通过约定的参数的正确方法是什么。是否有 JavaScript 规范的摘录,它定义了关于这个的语义应该是什么?

0 投票
8 回答
88347 浏览

python - 在 Python 中传递值

当您将列表、数组之类的集合传递给 python 中的另一个函数时,它会复制它,还是只是一个指针?

0 投票
2 回答
655 浏览

json - 从解析函数中传递JSON obj?| 菜鸟javascript问题

我正在尝试将对象从函数中传递出去。这是我的代码:

我想要做的不是在 parseJSON 函数中使用对象 o 我想将对象传递出去,以便在 loadJSON() 调用之后我可以对对象进行操作。我发现在 parse 函数中调用 innerHTML 并不“整洁”。

我已经尝试了很多迭代,例如在脚本开始时声明“var jsonOutput”,然后制作“jsonOutput = o”,但这只是让 jsonOutput 未定义。如果我尝试返回 jsonOutput,那么我不知道它被返回到哪里,无论如何我都无法使用它。

我需要创建一个全局变量吗?我尝试了一个简单的“全局 jsonOutput”声明,但它似乎没有在函数内部进行修改。

卡住了,请帮忙。

0 投票
6 回答
68686 浏览

c - 如何修改已传递给 C 函数的指针?

所以,我有一些代码,有点像下面,将结构添加到结构列表中:

这些结构定义如下:

然后在另一个文件中我执行以下操作:

但是,在这之后,l 仍然指向 EMPTY_LIST,而不是在 barPush 内部创建的修改版本。如果我想修改它,我是否必须将列表作为指向指针的指针传递,或者是否需要其他一些黑暗的咒语?

0 投票
6 回答
22792 浏览

java - Java 永远不会通过引用传递,对吗?...对吗?

可能的重复:
Java 是“按引用传递”吗?

今天发现了一个不寻常的Java方法:

根据我所读到的有关 Java 传递变量、复杂对象与否的行为的所有内容,这段代码应该什么都不做。所以嗯......我在这里错过了什么吗?我是否遗漏了一些微妙之处,或者这段代码是否属于 thedailywtf?

0 投票
8 回答
76491 浏览

python - 在 python 中模拟传值行为

我想模拟 python 中的按值传递行为。换句话说,我想绝对确保我编写的函数不会修改用户提供的数据。

一种可能的方法是使用深拷贝:

是否有更有效或更pythonic的方式来实现这个目标,对传递的对象做出尽可能少的假设(例如 .clone() 方法)

编辑

我知道从技术上讲,python 中的所有内容都是按值传递的。我对模拟这种行为很感兴趣,即确保我不会弄乱传递给函数的数据。我想最通用的方法是使用自己的克隆机制或使用 deepcopy 克隆有问题的对象。

0 投票
6 回答
3702 浏览

python - 如何在 Python 中将大量变量传入和传出函数?

我做科学编程,经常想给用户显示提示和变量对,让他们编辑变量,然后用新变量进行计算。我经常这样做,所以我编写了一个 wxPython 类来将此代码移出主程序。您为每个变量设置一个列表,其中包含变量的类型(字符串、浮点数、整数)、提示符和变量的当前值。然后将所有这些列表放在一个大列表中,我的实用程序会创建一个格式整齐的 wxPython 面板,其中包含提示和可以编辑的当前值。

当我开始时,我只有几个变量,所以我会写出每个变量。

现在我想将这个例程用于很多变量(10-30),这种方法正在崩溃。我可以使用 list.append() 语句在多行上创建函数的输入列表。但是,当代码从函数返回时,我得到了这个需要解压缩到正确变量中的巨大列表。这很难管理,看起来很容易让输入列表和输出列表不同步。更糟糕的是,它看起来很笨拙。

将大量变量传递给带有额外信息的 Python 函数以便可以编辑它们,然后取回变量以便我可以在程序的其余部分中使用它们的最佳方法是什么?

如果我可以通过引用将变量传递给函数,那么用户可以更改或不更改它们,一旦程序从函数返回,我将使用这些值。我只需要在多行上构建输入列表,并且输入列表不会与输出列表不同步。但是 Python 不允许这样做。

我应该将大列表分解成较小的列表,然后组合成大列表以传入和传出函数吗?或者这只是增加了更多出错的地方?

0 投票
4 回答
175 浏览

function - PHP 和 C++ 是我们需要注意的仅有的两个地方吗?看起来传递值确实是传递引用?

PHP 和 C++ 是我们在将简单数据类型变量作为函数参数传递并且值可以更改时唯一需要注意的两个地方吗?

第三行,echo $count 显示 2 以外的内容。我只知道 PHP 和 C++ 会在哪里发生。还有其他地方可以发生吗?

更新:也就是说,看起来像“按值传递”实际上是“按引用传递”。如果它在 Java、Perl、PHP、Python 和 Ruby 中传递对象,它会自动通过引用传递,并且可以更改对象的实例变量的值。那么传入非对象呢?