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,您将在控制台选项卡中看到结果)

简而言之

在本文中,我们首先了解了按值传递和按引用传递是什么,然后使用示例解释了这两个概念。

可以按值或按引用将值传递到函数。按值传递用于基本数据类型,例如字符串、数字和布尔值,并且每次将变量传递到函数时,都会创建该变量的副本并在按值传递过程中进行修改。按引用传递用于对象数据类型,例如函数、数组和普通对象;但是,由于按引用传递不会创建原始值的副本,因此原始值会被更新。

更新于: 2022-08-23

444 次查看

启动您的 职业生涯

通过完成课程获得认证

开始
广告

© . All rights reserved.