• 关于 js 函数参数值传递的理解


    1 基础类型参数

    const a = 1;
    let b = 1;
    function add(num){
        return num + 1
    }
    add(a)
    add(b)
    console.log(a)  // a = 1
    console.log(b) // a = 1

    a 、b 都没有影响

    2 引用类型参数

    const obj = {
        a: 1,
        b: 2
    }
    function Persion(obj) {
        obj.a = 2
        return obj
    }
    let p1 = Persion(obj)
    console.log(obj) // {a: 2, b: 2}
    console.log(p1) // {a: 2, b: 2}
    console.log(obj === p1) // true
    在什么情况下两个对象会全等?

    由此可见, 函数中 obj地址 指向的是 const 中 obj,然而这并未能说明什么。

    原则上 const 的指向地址是不允许改变的,假如函数的参数是按引用传递的话,我给函数中的 obj 指向另一个对象会怎样
    const obj = {
        a: 1,
        b: 2
    }
    function Persion(obj) {
        obj.a = 2
        obj = {
            a: 4,
            b: 4
        }
        return obj
    }
    let p1 = Persion(obj)
    console.log(obj)   // {a: 2, b: 2}
    console.log(p1)   // {a: 4, b: 4}
    console.log(obj === p1) // false
    按理应该会报错,可实际上并没有,为什么会这样?

    我们可以把上面的代码理解成
    const obj = {
        a: 1,
        b: 2
    }
    function Persion(obj) {
      let objs = obj; objs.a
    = 2 objs = { a: 4, b: 4 } return objs } let p1 = Persion(obj) console.log(obj)   // {a: 2, b: 2} console.log(p1)   // {a: 4, b: 4} console.log(obj === p1) // false
    
    

    这里实际上是 把我们的参数 当中一个局部变量给存储了起来,其实函数中的 obj 被赋值的时候,指向的地址就开始改变了,这就说明函数中的参数并非是按 引用传递 的。

  • 相关阅读:
    Codeforces
    Codeforces
    SCUT
    模板
    SCUT
    SCUT
    模板
    SCUT
    UVA 437 "The Tower of Babylon" (DAG上的动态规划)
    UVA 1025 "A Spy in the Metro " (DAG上的动态规划?? or 背包问题??)
  • 原文地址:https://www.cnblogs.com/fczbk/p/13649037.html
Copyright © 2020-2023  润新知