gpt4 book ai didi

javascript - 了解变量如何传递

转载 作者:行者123 更新时间:2023-11-28 11:13:44 25 4
gpt4 key购买 nike

我只是不明白变量是如何传递的,为什么有些是通过引用传递的,而另一些是通过值传递的?

示例:

var a=4;
var b=a;
b=b++;
alert(a);//unmodified 4

var c=["t","ttt"];
var d=c;
d=d.sort(function(x,y){return (y.length-x.length);});
alert(c);//modified ["ttt","t"]

在哪里可以找到哪些变量将像第一个示例一样工作以及哪些变量像第二个示例一样工作的列表? ( bool 值,字符串等......太多了,无法自己测试它们)

最佳答案

JavaScript总是按值传递。

人们常说 JavaScript 中的对象是通过引用传递的,但事实并非如此。在真正的引用传递语言中,您可以传递对对象引用的引用,并使其指向另一个对象。这在 JavaScript 中是不可能的。

以 C# 为例。默认情况下,C# 中的所有内容都是按值传递,就像 JavaScript 一样。

void foo(string s) {
s = "passbyvalue";
}

string a = "original value";
foo(a);
// a is still "original value"

但是,如果您将 foo 更改为使用按引用传递,则行为会发生变化:

void foo(ref string s) {
s = "passbyreference";
}
string a = "original value";
foo(ref a);
// a is now "passbyreference"

在 JavaScript 中,只有第一个示例是可能的。

在 JavaScript 中,一切都是按值传递的。这包括对象引用(是的,这很令人困惑)。引用本身是一个值(它非常像一个指针)。它仅包含一个 id,允许运行时查找最有可能存储在其堆中的对象。当您将对象传递给函数时,您实际上是将其引用复制到函数中

这可能是一个看似很小,甚至是肛门的差异。但这是一个关键的区别。具有真正的引用传递功能的语言(例如 C# 和 C++)允许您执行 JavaScript 等语言中根本不可能完成的操作。上面的老生常谈的例子就是其中之一。

关于javascript - 了解变量如何传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9952769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com