函数内修改变量,有关全局变量


 let a = { foo: 1 }
    function make(a){
        a.foo = 2
        a = { foo: 3 }
        console.log(a)
      }
      make(a)//打印出{foo:3},这个结果我能接受
      console.log(a);//打印出{foo“2}?这是为什么,不是再make函数里修改了变量a吗,不应该打印{foo:3}吗
结果是:

你可以通过函数的参数修改可变参数内部的变量,但你无法通过赋值直接改变外部参数
理解一下:

img

你可以通过函数内的变量修改a,但是当a赋值为其他对象时,函数的a和外部的a就不是一个了

其实就是值传递和引用传递的老问题了,常见语言都有这种现象。传参分为值传递和引用传递。JS里5种基本数据类型Undefined、Null、Boolean、Number 和 String是值传递,而其他诸如数组、对象都是引用传递,值传递会传递一个变量的副本,修改内部变量不会影响外部变量。而引用传递传递的是变量的引用,内部和外部共用一个引用对相同的对象进行操作。