原始类型(数字、字符串等)按值传递,但对象是未知的,因为它们都可以按值传递(如果我们认为持有对象的变量实际上是对对象的引用) 和通过引用传递(当我们认为对象的变量包含对象本身时)。
尽管最后并不重要,但我想知道呈现通过约定的参数的正确方法是什么。是否有 JavaScript 规范的摘录,它定义了关于这个的语义应该是什么?
这在 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);
这将产生输出:
10 changed unchanged
obj1
obj1.item
num
100
obj2.item
"changed"
10
"unchanged
相反,情况是传入的项目是按值传递的。但是按值传递的项目本身就是一个引用。从技术上讲,这称为共享呼叫。
实际上,这意味着如果您更改参数本身(如numand obj2),这不会影响输入参数的项目。但是,如果您更改参数的内部结构,它将传播回来(与 一样obj1)。
obj2