基本类型(数字,字符串等)按值传递,但对象未知,因为它们都可以按值传递(如果我们认为保存对象的变量实际上是对该对象的引用) )和按引用传递(当我们认为对象的变量包含对象本身时)。
尽管最后并没有什么大不了,但我想知道呈现通过惯例的参数的正确方法是什么。是否有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"
实际上,这意味着如果你更改参数本身(如num和一样obj2),则不会影响输入该参数的项目。但是,如果你更改参数的INTERNALS,则会传播回来(与一样obj1)。
obj2
INTERNALS