JavaScript 是传递引用还是传递值的语言?
JavaScript 为我们提供了函数,这些函数是一组预定义的指令或语句,只有当我们调用包含此代码的函数时才会执行。该函数接受一个或多个参数作为输入和输出。您可以为输入参数传递值或引用。
在 JavaScript 中,所有函数参数始终由值给出。它表示 JavaScript 将变量值的副本插入到函数参数中。
函数外部的传递变量不受您对函数内部参数所做的任何修改的影响。或者换句话说,对参数所做的更改不会影响函数外部的行为。
当变量通过引用提供给函数时,在函数外部所做的任何修改都将复制到您传入的变量中。JavaScript 无法支持这一点。
按值传递
按值传递是指通过简单地提供变量的值作为参数来调用函数的方法。因此,在函数内部所做的任何修改都不会影响起始值。
按值传递时,每个参数的参数都会复制自身。因此,函数内所做的所有修改都是对克隆的值而不是原始值进行的。
示例 1
在这个例子中,让我们理解,通过将变量的值直接作为参数传递,可以调用接受按值传递调用的函数。
<!DOCTYPE html> <html> <title>Is JavaScript a pass-by-reference or pass-by-value language - TutorialsPoint</title> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body style="text-align:center"> <script> function passValue(y, z) { let subst; subst = z; z = y; y = subst; document.write(`This code is in the function -> y = ${y} z = ${z}` +'<br>'); } let y = 6; let z = 12; document.write(`This code before calling the Function -> y = ${y} z = ${z}` +'<br>'); passValue(y, z); document.write(`This code after calling the Function -> y =${y} z = ${z}`); </script> </body> </html>
通过引用传递
通过引用传递通过立即将变量的引用或地址作为参数传递来调用函数。因此,在函数内更改值也会修改起始值。JavaScript 中使用数组和对象通过引用传递属性。
通过引用传递意味着作为参数提供的参数与原始值相关,而不是制作自己的副本,这意味着在函数内部进行的修改会对原始值产生影响。
示例 2
让我们看一个例子来更好地理解如何调用接受变量地址或引用的函数。
<!DOCTYPE html> <html> <title>Is JavaScript a pass-by-reference or pass-by-value language - TutorialsPoint</title> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body style="text-align:center"> <script> function passReference(object) { let subst = object.y; object.y = object.z; object.z = subst; document.write(`This code is in the Function -> y = ${object.y} z = ${object.z}` +'<br>'); } let object = { y: 15, z: 30 } document.write(`This code before calling the Function -> y = ${object.y} z = ${object.z}` +'<br>'); passReference(object) document.write(`This code after calling the Function -> y = ${object.y} z = ${object.z}`); </script> </body> </html>
示例 3
让我们使用此示例来了解如何在函数中更新对象引用。
使用传递引用时,我们正在更改原始值。当我们将对象作为参数并在函数上下文中更改其引用时,对象值不受影响。但是,在内部更改对象会对其产生影响。
function passReference(object) { object = { x: 15, y: 30, z: "Tutorialspoint" } console.log(`This code is in the Function -> object `); console.log(object); } let object = { x: 15, y: 30 } console.log(`object reference is getting update -> `) console.log(`This code before calling the Function -> object`); console.log(object); passReference(object) console.log(`This code after calling the Function -> object`); console.log(object);
上述代码将给出以下输出:(单击 F12,您将在控制台选项卡中看到结果)
简介
在本文中,我们首先了解了什么是按值传递和按引用传递,然后使用示例解释了这两个概念。
将值传递给函数可以通过值或引用来完成。按值传递用于字符串、数字和布尔值等原始数据类型,每次将变量传递给函数时,都会生成并修改该变量的副本,作为按值传递过程的一部分。按引用传递用于函数、数组和普通对象等对象数据类型;但是,由于按引用传递不会复制原始值,因此原始值会更新。