美文网首页
JS函数传参

JS函数传参

作者: 捡了幸福的猪 | 来源:发表于2021-10-12 21:20 被阅读0次

    js 函数调用基础知识

    一个小栗子

    const person = { age: 12 }
    const changeAge = (person) => {
      person = { age: 20}
    }
    changeAge(person)
    console.log(person.age)  
    

    问输出什么呢~ person会不会更改呢(mutate)
    这个问题就是 JavaScript中函数的传参类型问题~~
    5分钟get这个重要的知识点吧~

    基础知识

    javaScript 中 包括基本类型与引用类型的数据。在js引擎中对变量的存储主要有两种位置:堆内存栈内存

    • 栈内存主要用于存储各种基本类型的变量。
    • 堆内存主要负责像对象Object这种变量类型的存储。


      堆&栈.png

    分析

    1、 基本类型

    const age1 = 12;
    const age2= age1 ;
    age2= 20;
    console.log(age1);  //  12 
    console.log(age2);  //  20
    

    基本类型复制的是自己在栈内存中的值

    函数参数为基本类型

    const age1 = 12
    const changeAge = (age) => {
      age = 20
    }
    console.log(age1) // 12
    

    函数参数为基本类型时是值传递.

    2、引用类型

    const person1 = { age: 12 }
    const person2 = person1
    person2.age = 20
    console.log(person1.age) // 20
    console.log(person2.age) // 20
    

    引用类型复制的是自己在栈内存中的“指针”值,“指针”指向的是堆里面的数据 ; 即person1 和person2 都指向了堆中的同一个数据;

    函数参数为引用类型时:

    const person = { age: 12 }
    const changeAge = (person) => {
      person.age = 20
    }
    changeAge(person)
    console.log(person.age)  // 20
    

    函数参数为引用类型时看起来好像是引用传递,但是实际是传递了“指针”这个值。

    再看开头的这个🌰:

    const person = { age: 12 }
    const changeAge = (person) => {
      person = { age: 20}
    }
    changeAge(person)
    console.log(person.age)  // 12
    

    当我把 person 传进去的时候,实际是传递了“指针”(就是它的内存地址)这个值 ,并不是person 本身; 在 函数 内部更改了参数的指向, 所以内部函数的更改不能影响到外部。因此 ,函数参数传递的是内存地址这个值,函数传递参数就是按值传递的

    hi~~ 是不是还比较清晰? 点个赞呗~~

    相关文章

      网友评论

          本文标题:JS函数传参

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