JavaScript 中,基本类型的值(number、string、boolean、null、undefined)是按值传递的,也就是说改变一个变量的值不会影响另一个变量的值。而引用类型的值(object、array、function)则是按引用传递的,也就是说改变一个变量的值会同时改变另一个变量的值。接下来对引用类型传递的知识点进行详细讲解:
引用类型传递的基本原理
引用类型的值在 JavaScript 中作为对象来处理。不同于基本类型的值,引用类型的值在赋值时复制的是指向对象的引用,而非所有的对象数据。比如:
let person1 = {
name: 'Tom',
age: 20
}
let person2 = person1
person2.name = 'Jerry'
console.log(person1.name) // => 'Jerry'
在这个示例中,我们创建了一个 person1
对象,它有一个 name
属性和一个 age
属性。然后将 person1
赋值给 person2
,在修改 person2
的 name
属性后,发现 person1
的 name
属性也被修改了。这是因为在修改 person2
的 name
属性时,实际上修改的是存储在堆内存中的 person1
对象。因此在 JavaScript 中,当我们传递一个引用类型的值作为参数时,实际上传递的是指向该对象的引用,而该对象可能会在函数内部被修改。
引用类型传递的应用:函数参数的传递
由于函数参数的传递方式是以值的形式传递的,因此传递一个对象时,传递的实际是指向该对象的引用。在函数内部修改对象时,实际修改的是对象的属性,且该对象的引用保持不变。比如:
function changeName(person) {
person.name = 'Lucy'
}
let person1 = {
name: 'Tom',
age: 20
}
changeName(person1)
console.log(person1.name) // => 'Lucy'
在这个示例中,我们定义了一个 changeName
函数,该函数接受一个对象作为参数,并将对象的 name
属性修改为 Lucy
。然后创建了一个 person1
对象,并将其传递给 changeName
函数,发现在函数执行后,person1
的 name
属性也被修改成了 Lucy
。
引用类型传递的应用:数组操作
由于在 JavaScript 中,数组也属于引用类型,因此在操作数组时传递的也是数组的引用。如果将一个数组作为函数参数传递给另一个函数,该函数可能会更改数组中的值。比如:
function changeArray(array) {
array[1] = 3
}
let arr1 = [1, 2, 4]
changeArray(arr1)
console.log(arr1) // => [1, 3, 4]
在这个示例中,我们定义了一个 changeArray
函数,该函数接受一个数组作为参数,并将数组中第二个元素修改为 3
。然后创建了一个 arr1
数组,并将其传递给 changeArray
函数,发现在函数执行后,arr1
的第二个元素也被修改成了 3
。
总结
在 JavaScript 中,引用类型的值是按引用传递的。当我们将一个引用类型的值作为函数参数传递时,传递的是指向该对象的引用,而该对象可能会在函数内部被修改。因此我们需要特别注意在函数内部对引用类型进行修改时,可能会对传递该值的变量造成影响。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Javascript中引用类型传递的知识点小结 - Python技术站