问题标签 [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 投票
10 回答
43665 浏览

c# - C# 中引用类型变量的“ref”有什么用?

我知道如果我将值类型(int,struct等)作为参数(不带ref关键字)传递,则该变量的副本将传递给该方法,但如果我使用ref关键字,则传递对该变量的引用,不是新的。

但是对于引用类型,如类,即使没有ref关键字,引用也会传递给方法,而不是副本。那么ref关键字与引用类型的用途是什么?


举个例子:

以下有什么区别?

0 投票
2 回答
5827 浏览

vb6 - Visual Basic 6.0 传递值引用的区别

在以下代码中,我收到编译时错误,因为i它被视为变体。错误是:“ByRef 参数类型不匹配。”。

但是如果我传递参数ByVal,没有错误,为什么?

0 投票
4 回答
23111 浏览

javascript - 如何按值将变量传递给匿名javascript函数?

目标

我想将事件处理程序动态分配给整个站点页面上的某些 div。

我的方法

我使用 jQuery 将匿名函数绑定为选定 div 事件的处理程序。

问题

该代码迭代了一个 div 名称和关联 url 的数组。div 名称用于设置绑定目标,即将此事件处理程序附加到此 div 事件。

虽然事件处理程序已成功绑定到每个 div 事件,但由这些事件处理程序触发的操作仅针对数组中的最后一项。

所以想法是,如果用户将鼠标悬停在给定的 div 上,它应该为该 div 运行滑出动画。但是,将鼠标悬停在 div1 (rangeTabAll) 上会触发 div4 (rangeTabThm) 的滑出动画。div 2、3 等也是如此。顺序并不重要。更改数组元素,事件将始终以数组中的最后一个元素 div4 为目标。

我的代码 - (使用 jQuery)

我的理论

我要么没有看到明显的语法错误,要么没有看到引用传递问题。最初我有以下语句来设置 curTab 的值:

因此,当问题发生时,我认为当我更改(通过 for 循环迭代)对 curTab 的引用时,我实际上正在将所有以前的匿名函数事件处理程序的引用更改为新的 curTab 值......这就是为什么事件处理程序始终以最后一个 div 为目标。

所以我真正需要做的是将 curTab传递给匿名函数事件处理程序,而不是 curTab对象引用。

所以我认为:

可以解决问题,但不能。同样的交易。所以很明显我错过了一些关于这个问题的关键知识,而且可能是非常基本的知识。谢谢。

0 投票
4 回答
6757 浏览

python - Python 的布尔值是按值传递的吗?

我发送了对 bool 对象的引用,并在方法中对其进行了修改。方法执行完毕后,方法外的布尔值没有改变。

这让我相信 Python 的布尔值是按值传递的。真的吗?还有哪些其他 Python 类型有这种行为?

0 投票
1 回答
366 浏览

r - 嵌套函数的复杂对象初始化范围问题

好的,所以我正在尝试使用 S4 类来构建一个非常复杂的对象,其中的插槽包括六个矩阵、一些列表,可能还有一个或两个厨房水槽。该对象是通过引用和解压缩我已经定义的配置对象来初始化的。用 setClass() 定义类很容易,但我很难找到一种优雅的方法来设置 setMethod("initialize") 中的插槽。

问题是我需要根据该配置对象的部分设置这些六个矩阵的特定元素。对于配置对象的每个元素,我可能必须设置几个矩阵的特定元素。请注意,矩阵位于初始化函数的范围/环境中。然后我在初始化函数中嵌套了函数,这些函数对矩阵进行实际分配,或者无论如何都是这样。这些函数当然可以看到矩阵,但它们不能修改它们是因为如果未在当前环境中定义原始变量,则 <- 运算符会创建一个新矩阵。R 是按值传递,并且意味着它。这对于我试图初始化的 .Object 的插槽也是如此。所以我不能使用嵌套函数来进行初始化。

不幸的是,这些嵌套函数必须修改几个矩阵,因此在主初始化函数中返回值和进行赋值既不实用也不优雅。(但有可能,如果我将矩阵的副本填充到返回的列表中,然后将它们组合到主初始化函数中。虽然很丑,并且需要大量额外的代码。)

并且迭代(这将防止这个范围问题)也不是很实用,因为配置对象的分层性质,它确实希望通过递归调用进行遍历。

我能想到的最后一个选项是使用带有 envir 选项的 assign() 函数来强制赋值应用于非局部变量。但是使用这样的环境似乎很恶心,就像一个 goto 语句......

那么,最海盗的做法是什么?坚持纯函数式编程并构建丑陋的数据结构只是为了低效地绕过冗余矩阵?尝试找到一个完全避免使用函数的迭代解决方案?通过玩环境来使用深层魔法?

0 投票
4 回答
621 浏览

.net - 假装 .NET 字符串是值类型

在 .NET 中,字符串是不可变的并且是引用类型变量。这对于新的 .NET 开发人员来说常常是一个惊喜,他们可能会因为它们的行为而将它们误认为是值类型对象。但是,除了使用StringBuilder长连接 esp 的做法。在循环中,在实践中是否有任何理由需要知道这种区别?

通过了解 .NET 字符串的值引用区别与仅仅假装/误解它们是值类型,可以帮助或避免哪些实际场景?

0 投票
8 回答
53270 浏览

java - 为什么在比较 Java 中的整数包装器时 128==128 为假但 127==127 为真?

输出:


输出:

注意:-128 到 127 之间的数字为真。

0 投票
6 回答
7557 浏览

c++ - 值参数的 const 正确性

我知道几乎没有关于 const 正确性的问题,其中声明函数的声明及其定义不需要就值参数达成一致。这是因为值参数的常量只在函数内部很重要。这可以:

这样做真的是最佳实践吗?因为我从未见过有人这样做。我在其他地方看到过这个引用(不确定来源),这已经被讨论过:

“事实上,对于编译器来说,无论你是否在值参数前面包含这个 const,函数签名都是一样的。”

“避免在函数声明中使用 const 传值参数。如果不修改,仍然在同一函数的定义中使用 const 参数。”

第二段说不要将 const 放在声明中。我认为这是因为值参数的常量作为接口定义的一部分是没有意义的。这是一个实现细节。

基于这个推荐,指针参数的指针值是否也推荐?(它对引用参数没有意义,因为您不能重新分配引用。)

总结:制作值参数对于捕获一些逻辑错误很有用。这是最佳实践吗?您是否走到了将 const 排除在头文件之外的极端?const 指针值是否同样有用?为什么或者为什么不?

一些参考资料:

C++ const 关键字 - 随意使用? 对函数参数使用“const”

const 值参数何时有用的示例:

0 投票
4 回答
3746 浏览

c# - DataGridView:按值或引用传递?

我认为 DataGridView 是内存猪。通过值传递datagridview还是通过引用更好?它甚至应该通过吗?

0 投票
2 回答
1999 浏览

javascript - 如何在javascript中复制引用的值?

前段时间我发布了一个问题,关于一个好的 javascript 编码器应该能够回答哪些问题。Meder 指出了以下问题:

由于“i”在 onclick 函数中作为引用而不是作为值保存,因此以下代码会单击任何“a”元素到 alert(-1):

问题是:如何修复这个实现,以便 onclick 函数保存 i 的值而不是它的引用?

我不知道答案。如何解决?如何使 i 成为参考值的副本而不是实际参考?

附带问题:是否所有变量类型都作为引用传入?或者它是基本类型还是对象?

任何想法将不胜感激。