JavaScript是按引用传递还是按值传递语言?
基本类型(数字,字符串等)按值传递,但对象是未知的,因为它们都可以按值传递(如果我们认为保存对象的变量实际上是对对象的引用) )和按引用传递(当我们认为对象的变量包含对象本身时)。 尽管最后并没有什么大不了,但我想知道呈现通过惯例的参数的正确方法是什么。 是否有JavaScript规范的摘录,其中定义了与此相关的语义? #1楼 当我想将一个对象作为参数传递或修改或完全替换时,我发现 Underscore.js库 的 extend方法 非常有用。 function replaceOrModify(aObj) { if (modify) { aObj.setNewValue('foo'); } else { var newObj = new MyObject(); // _.extend(destination, *sources) _.extend(newObj, aObj); } } #2楼 基元按值传递,对象按引用传递。 这与其他语言(如C,Visual Basic或Delphi)完全不同。 我不能说它们如何精确地处理对象和基元,但是我知道Visual Basic和Delphi可以(并且应该)指定它们。 从版本5开始,PHP进行了类似的操作:所有对象都通过引用传递,但是所有原语 都 可以通过引用传递(如果前面带有&符)。 否则,基元将按值传递。 因此,在JavaScript中