js--函数传值

  • 摘自JS高级程序-第三版
JS中所有的函数的参数都是按值传递的!!!
  • 虽然访问变量有按值和按引用传递两种,但是函数参数的传递只能按值传递。具体的方法是:

  • 如果是基本类型的值,就将值复制给函数参数,其实也就是arguments对象中的一个元素。

  • 如果是引用类型的值,就将这个值在内存中的地址复制给函数参数。

  • 在函数内部,函数参数实际上是一个局部变量。

  • 如果函数参数保持传入的引用地址不变,则在函数内部改变函数参数所指向的对象的值,在函数外访问时该对象也会随之改变。如果函数参数中途被改变过,则会指向新的对象,丢失原来的地址引用,此时改变函数参数所指对象的值,不会对函数外的对象造成改变。

  • 代码对比如下:
    function setName(obj) {
    obj.name = "Nicholas";
    }
    var person = new Object();
    setName(person);
    alert(person.name); //"Nicholas"

  • function setName(obj) {
          obj.name = "Nicholas";
          obj = new Object();
          obj.name = "Greg";
      }
      
      var person = new Object();
      setName(person);
      alert(person.name);    //"Greg"
    
  • 解析:上述中,在函数内部修改了形参的值,形参指向了一个新创建的对象,但原始的引用仍未改变。obj与person所引用的已经不再是同一个对象,所以两者的修改互不影响。而且obj指向的对象是一个局部对象,会在函数执行完毕后立即被销毁。

你可能感兴趣的:(js--函数传值)