当前位置: 首页 > 编程笔记 >

JavaScript 通过引用或值传递参数

范玄裳
2023-03-14
本文向大家介绍JavaScript 通过引用或值传递参数,包括了JavaScript 通过引用或值传递参数的使用技巧和注意事项,需要的朋友参考一下

示例

在JavaScript中,所有参数均按值传递。当函数将新值分配给参数变量时,该更改将对调用者不可见:

var obj = {a: 2};
function myfunc(arg){
    arg = {a: 5}; // 注意分配是给参数变量本身
}
myfunc(obj);
console.log(obj.a); // 2

但是,此类参数的(嵌套)属性所做的更改对调用者将是可见的:

var obj = {a: 2};
function myfunc(arg){
   arg.a= 5; // 分配给参数的属性
}
myfunc(obj);
console.log(obj.a); // 5

这可以看作是通过引用进行的调用:尽管函数无法通过为其分配新值来更改调用者的对象,但它可能会使调用者的对象发生突变

由于原始值参数(例如数字或字符串)是不可变的,因此函数无法对其进行突变:

var s = 'say';
function myfunc(arg){
    arg += ' hello'; // 分配给参数变量本身
}
myfunc(s);
console.log(s); // '说'

当一个函数想要改变作为参数传递的对象,但又不想真正改变调用者的对象时,应该重新分配参数变量:

6
var obj = {a: 2, b: 3};
function myfunc(arg){
    arg = Object.assign({}, arg); // 分配给参数变量,浅表副本
   arg.a= 5;
}
myfunc(obj);
console.log(obj.a); // 2

作为对参数进行就地突变的替代方法,函数可以基于参数创建一个新值,然后将其返回。然后,调用者甚至可以将其分配给作为参数传递的原始变量:

var a = 2;
function myfunc(arg){
    arg++;
    return arg;
}
a = myfunc(a);
console.log(obj.a); // 3
           

 类似资料:
  • 本文向大家介绍Python中的参数如何通过值或引用传递?,包括了Python中的参数如何通过值或引用传递?的使用技巧和注意事项,需要的朋友参考一下 Python使用的机构,这被称为“呼叫逐对象”,有时也被称为“呼叫由对象参考”或“呼叫通过共享” 如果将不变的参数(例如整数,字符串或元组)传递给函数,则传递的行为类似于C all-by-value。如果传递可变参数,则有所不同。 Python语言中的

  • 有一组好的规则来确定是按值传递还是常量引用 如果函数打算将参数更改为副作用,则通过non-const引用。 如果函数不修改它的参数,并且参数是基元类型,则按值取它。 否则通过const引用获取它,除非在以下情况下:如果函数需要复制const引用,则按值获取它。 对于以下构造函数,如何确定它?

  • 问题内容: Javascript是通过引用传递还是通过值传递?这是 Javascript中的 一个示例 :The Good Parts 。我对矩形函数的参数非常困惑。它实际上是,并在函数内部重新定义。没有原始参考。如果我从功能参数中删除它,则内部区域功能将无法访问它。 是关闭吗?但是没有函数返回。 问题答案: 基元按值传递,对象按“引用副本”传递。 具体来说,当您传递对象(或数组)时,您(无形中)

  • 问题内容: 该程序给出6作为输出,但是当我取消注释第9行时,输出为5。为什么?我认为ba不应更改,主要应保持5。 问题答案: 在Java中传递对象时,它们将作为in 方法中引用的参考含义对象和method 中的参数传递,它们都指向同一对象,因此,当您将值更改为6时,它将反映在方法中。 现在,当您尝试执行此操作时,您将指向另一个对象,但仍指向您在方法中创建的对象,因此更新的值6在main方法中不可见

  • 可能重复: 是传递const std::string的天数 如果支持移动语义学,我应该通过值传递d::字符串吗?那么使用小字符串优化(SSO)的实现呢?

  • 问题内容: 我真的是Swift的新手,我刚刚读到类是通过引用传递的,并且复制了数组/字符串等。 通过引用进行传递是否与在Objective-C或Java中通过“ a”引用进行传递的方式相同,还是通过引用进行正确传递? 问题答案: Swift中的事物类型 规则是: 类实例是 引用类型 (即, 您 对类实例的引用实际上是一个 指针 ) 函数是参考类型 其他一切都是 价值类型 ; “其他所有内容”仅表示