javascript - 以下 Javascript 函数是按值还是按引用传递参数?我不确定如何区分两者

标签 javascript function reference

<分区>

我无法弄清楚按引用传递和按值传递是什么样子的(我知道它们在理论上的含义)。你能告诉我下面的函数是否按值或引用传递参数吗?顺便说一句,这是我的第一篇文章:)

var number_1 = 32;
var number_2 = 43;

function addition(num1,num2) {
    alert (num1*num2) ;
}

addition(number_1,number_2); /*is this passing by reference?*/

最佳答案

原始类型

在 javascript 中,数字、字符串、 bool 值属于基元类别。 每当将此类类型作为参数传递给函数时,都会在函数范围内创建一个单独的副本,这对外部范围没有影响

例如

var number_1 = 32;
var number_2 = 43;
addition(32,43);
//number_1 is 32 here
//number_2 is 43 here

function addition(number_1,number_2) {
    number_1 += 1; // number_1 is 33
    number_2 += 1; // number_2 is 44
}

引用类型

引用类型略有不同

举个例子

var obj = new Object();
fn(obj);

function fn(object){
  object.property = "test";
  //obj.property is "test"
  object = new Object();
  object.property = "test 2";
  //obj.property is still "test"
  //obj.property should have changed to "test 2", 
  //if it had been passed by reference
}

如果它是通过引用传递的,obj.property 应该在 fn 中的最后一条语句之后更改为“test 2”,但事实并非如此。 因此,当将引用值传递给函数时,会传递指向对象的指针的单独副本。

关于javascript - 以下 Javascript 函数是按值还是按引用传递参数?我不确定如何区分两者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25276762/

相关文章:

wordpress - 如何在 wordpress ul 容器周围添加 div

C#引用成员变量

Javascript/Jquery 评论导致 IE 错误

javascript - Vue.js:使用方法切换动态数据的 CSS 类

javascript - 所有视口(viewport)周围的进度条?

python - 如何使用相同的参数正确调用多个函数?

javascript - 在 NExtJS 5 中渲染后以编程方式设置所选记录

function - 函数定义中的常量和自变量

c++ - 我误解了指针的工作原理吗?

c++ - I/O 操纵器错误或 const ref 的临时生命周期延长?