温馨提示:这篇文章已超过299天没有更新,请注意相关的内容是否还可用!
JavaScript中的函数参数是通过引用传递的。这意味着当我们将一个对象作为参数传递给函数时,函数内部对该对象的修改会影响到原始对象。这是因为JavaScript中的对象是通过引用来传递的,而不是通过值来传递的。
例如,假设我们有一个函数`changeName`,它接受一个人的对象作为参数,并将该人的姓名修改为"John"。在函数内部,我们可以直接修改该对象的属性来实现这一点。当我们在函数外部访问该对象时,我们会发现它的姓名已经被修改了。
function changeName(person) {
person.name = "John";
}
var person1 = { name: "Alice" };
console.log(person1.name); // 输出 "Alice"
changeName(person1);
console.log(person1.name); // 输出 "John"
在上面的示例中,我们首先创建了一个名为`person1`的对象,它的姓名属性被设置为"Alice"。然后,我们调用`changeName`函数并将`person1`作为参数传递给它。在函数内部,我们将`person1`的姓名属性修改为"John"。当我们在函数外部再次访问`person1`的姓名属性时,我们会发现它已经被成功修改为"John"。
这是因为在JavaScript中,对象是通过引用来传递的。当我们将一个对象作为参数传递给函数时,函数接收到的是对象的引用,而不是对象本身的副本。函数内部对该对象的修改会直接影响到原始对象。
需要注意的是,虽然函数参数是通过引用传递的,但是如果在函数内部重新分配一个新的对象给参数,那么它将不会影响到原始对象。因为此时函数内部的参数引用已经指向了一个新的对象。
function changePerson(person) {
person = { name: "Bob" };
}
var person2 = { name: "Alice" };
console.log(person2.name); // 输出 "Alice"
changePerson(person2);
console.log(person2.name); // 输出 "Alice"
在上面的示例中,我们定义了一个新的函数`changePerson`,它将一个人的对象作为参数。在函数内部,我们重新分配了一个新的对象给参数`person`。尽管在函数内部我们修改了参数的引用,但是这并不会影响到原始的`person2`对象。当我们在函数外部访问`person2`的姓名属性时,它仍然是"Alice"。