美文网首页
js--函数传值

js--函数传值

作者: 栗子酥小小 | 来源:发表于2017-03-19 22:26 被阅读0次
    • 摘自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--函数传值

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