JavaScript是一种传递引用还是按值传递的语言?

原始类型(Number,String等)按值传递,但是对象是未知的,因为它们可以是值传递(如果我们认为持有对象的变量实际上是对象的引用)并且通过引用传递(当我们认为对象的变量保存对象本身时)。

虽然最后并不重要,但我想知道提交传递约定的参数的正确方法是什么。是否有JavaScript规范的摘录,它定义了与此相关的语义?

JavaScript是一种传递引用还是按值传递的语言?

呼啦一阵风
浏览 501回答 4
4回答

慕无忌1623718

它在Javascript中很有趣。考虑这个例子:function changeStuff(a, b, c){  a = a * 10;  b.item = "changed";  c = {item: "changed"};}var num = 10;var obj1 = {item: "unchanged"};var obj2 = {item: "unchanged"};changeStuff(num, obj1, obj2);console.log(num);console.log(obj1.item);    console.log(obj2.item);这会产生输出:10changedunchanged如果它是纯值传递值,那么更改obj1.item将对obj1函数外部没有影响。如果它是纯粹的参考传递,那么一切都会改变。num会100,并obj2.item会读"changed"。相反,情况是传入的项目是按值传递的。但是通过值传递的项本身就是一个引用。从技术上讲,这称为分享呼叫。实际上,这意味着如果您更改参数本身(与num和一样obj2),则不会影响输入参数的项目。但是如果你更改参数的INTERNALS,它将传播回来(如同obj1)。

慕容3067478

变量不“保持”对象,它保存一个引用。您可以将该引用分配给另一个变量,现在它们都引用同一个对象。它总是按值传递(即使该值是参考值......)。没有办法改变作为参数传递的变量所持有的值,如果JS支持通过引用传递,这将是可能的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript