javascript - 如何使函数参数的值等于变量的值
问题描述
我在这个例子中提供的实际功能不是问题。我只想知道如何在将变量用作函数中的参数后保存它们的值。我试图制作一个非常简单的函数来切换两个变量的值。我知道如何在没有函数的情况下做到这一点,但想用函数概括解决方案。
我尝试编写以下代码,
let a = 3;
let b = 4;
const switchItems = (c,d) => {
var temp = c;
c = d;
d = temp;
}
switchItems(a,b);
我预计 a 为 4,b 为 3,但变量与函数之前的变量保持一致。
我不在乎如何使用我使用的特定交换函数来执行此操作,我只想知道如何在不引用它的情况下更改函数内部的全局变量。
解决方案
你不能。
Javascript 的调用语义意味着函数接收引用的副本;如果你改变它,你只是改变了内部参考。例外是您可以更改存储在外部范围(例如全局范围)中的值。但是您传递给它的值是无关紧要的。
如果您愿意,您可以做的是返回参数数组的交换副本:
let [b, a] = swap(a, b);
但是没有理由创建这样一个函数,因为它没有那么简单
let [b, a] = [a, b];
更新
从问题编辑:
我只想知道如何在不引用函数的情况下更改函数内部的全局变量。
这取决于您在这里所说的“改变”是什么意思。您可以为其分配一个新的引用,但前提是您有它的名称,并且参数是不相关的。如果你想改变它的内部结构,那很简单:
const foo = {bar: 42}
function baz(x) {
x.bar += 1;
}
baz(foo);
foo //=> {bar: 42}
但似乎你想要的不止于此,而那是不可用的。
推荐阅读
- c++ - 为什么 EnumDomains/NextDomain 永远循环?
- java - DynamoDBMappingException:无法取消转换属性,预期值为 S
- java - 如何重新格式化字符串中的特定单词?
- ethereum - 重启电脑后,以太坊 geth 再次将块重置为 0
- android - 如何在 Espresso 测试中对 MaterialDatePicker 执行操作?
- kernel - ftrace 问题我有什么遗漏吗?
- powershell - 结合两个字典并用powershell中的值替换键
- python - 两个或多个小部件同时悬停效果?
- sql - 带有 IF 条件和 WHERE 条件的 CONCAT 列
- javascript - 进度指示器颜色根据部分背景颜色更改 (fullpage.js)