首页 > 解决方案 > 如何使函数参数的值等于变量的值

问题描述

我在这个例子中提供的实际功能不是问题。我只想知道如何在将变量用作函数中的参数后保存它们的值。我试图制作一个非常简单的函数来切换两个变量的值。我知道如何在没有函数的情况下做到这一点,但想用函数概括解决方案。

我尝试编写以下代码,

let a = 3;
let b = 4;

const switchItems = (c,d) => {
    var temp = c;
    c = d;
    d = temp;
}

switchItems(a,b);

我预计 a 为 4,b 为 3,但变量与函数之前的变量保持一致。

我不在乎如何使用我使用的特定交换函数来执行此操作,我只想知道如何在不引用它的情况下更改函数内部的全局变量。

标签: javascriptfunction

解决方案


你不能。

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}

但似乎你想要的不止于此,而那是不可用的。


推荐阅读