美文网首页
Java Script可以直接修改函数的形参吗?

Java Script可以直接修改函数的形参吗?

作者: 葛明路 | 来源:发表于2022-01-13 19:40 被阅读0次

最近公司有一个项目出现了bug让我去解决,发现之前的同事直接在函数里面修改了形参导致的问题那么Java Script可以直接修改函数的形参吗?

我们看一下下面的几个例子。

var a = 10;
function fn(a) {
  a = 20;
  console.log(a, arguments[0]); // 20 20
}
fn(a)
console.log(a)  // 10

变量a没有被修改

var param = {
  name: 'Jack',
  age: '18',
}
function fn(param){
  param.name = "Lucy"
}
fn(param);
console.log(param.name) // Lucy

param.name被修改了。

这里面涉及到深克隆的问题,Javascript数据类型分为基本数据类型(Number,String,Boolean,Undefined,Null)和引用数据类型(Object,Array,Function)。基本数据类型的值存放在栈中,将一个基本数据类型赋值给一个变量就是将他的值复制了一份,引用数据类型的链接地址存放在栈中连接地址指向堆中的值,将引用类型复制一份其实是将他的链接赋值给新的变量两个变量指向同一个值。

再来看看forEach和map会不会修改原数据。

var student = [
  {
    name: 'Jack',
    age: '18',
  },
  {
    name: 'Lucy',
    age: '20',
  },
]
student.forEach((item) => { item.age = 25 })
console.log(student);
// { name: 'Jack',  age: '25', },
// { name: 'Lucy', age: '25', },
student.map((item) => { item.age = 30 })
console.log(student);
// { name: 'Jack',  age: '30', },
// { name: 'Lucy', age: '30', },

forEach和map的定义区别就是forEact没有返回值map有返回值,forEach会修改原数据这道不奇怪,奇怪的是map也修改了原数据这和map的设计思想不太一样,这应该算是js的一种缺陷,在实际应用中使用map就是不想修改原数据因为map会返回一个新数组。如果不想原数据被改变可以使用这种方法。

const results = student.map((item) => ({ ...item, age: 30 }))

相关文章

  • Java Script可以直接修改函数的形参吗?

    最近公司有一个项目出现了bug让我去解决,发现之前的同事直接在函数里面修改了形参导致的问题那么Java Scrip...

  • JavaScript学习笔记 - 函数

    3. 函数 3.1 函数的形参和实参 形参修改时,并不会影响到实参 函数调用时,输入参数的个数可以多于函数定义的参...

  • C语言数组指针

    总:如果编写的函数需要修改数组,在声明数组形参的不使用const;如果编写的函数不用修改数组,那么在声明数组形参时...

  • 1.arguments

    概念: 1,不管函数是否申明了形参,在函数内部都可以直接使用arguments对象来直接引用当前调用函数传入的实参...

  • swift

    swift 函数 一、函数的定义函数的定义格式 形参列表的格式形参名1: 形参类型1, 形参名2: 形参类型2, ...

  • 1.加深记忆:OC知识点截图

    1. C语言函数知识: (1)如果函数形参是基本数据类型,意味着值传递,修改函数内部形参不会影响外面实参的值;如果...

  • C语言小码哥指针<|重点|>

    函数一些小技巧: 如果函数的形参是基本类型(如:int float double char)那么在函数内部中修改形...

  • C++之引用

    概述 引用的本质是给已经存在的变量取别名 定义的步骤 引用作为函数的形参 引用作为函数的形参,函数内部可以通过形参...

  • 指针相关知识

    如何通过被调函数修改主调函数中多个变量的值 实参必须为该普通变量的值 形参必须为指针变量 被调函数中通过 *形参名...

  • python+AI第五课

    函数 function 1 代码重用 2 便与修改,易扩展 改进封装成函数 函数的形参和实参形式参数、实际调动的参...

网友评论

      本文标题:Java Script可以直接修改函数的形参吗?

      本文链接:https://www.haomeiwen.com/subject/uhqocrtx.html