账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    js高程中第71页中的例子(关于传递参数的引用类型值的传递),两个小问题理解不来
    15
    0

    举一个例子:
    function setName(obj) {
    obj.name = "Nicholas";
    }
    var person = new Object();
    setName(person);
    alert(person.name); //"Nicholas"
    FunctionArgumentsExample02.htm
    以上代码中创建一个对象,并将其保存在了变量 person 中。然后,这个变量被传递到 setName()
    函数中之后就被复制给了 obj 。在这个函数内部, obj 和 person 引用的是同一个对象。**换句话说,即
    使这个变量是按值传递的, obj 也会按引用来访问同一个对象。---问题1:这里说的按值传递,这个值是指什么?**于是,当在函数内部为 obj 添加 name
    属性后,函数外部的 person 也将有所反映;因为 person 指向的对象在堆内存中只有一个,而且是全
    局对象。有很多开发人员错误地认为:在局部作用域中修改的对象会在全局作用域中反映出来,就说明
    参数是按引用传递的。为了证明对象是按值传递的,我们再看一看下面这个经过修改的例子:
    function setName(obj) {
    obj.name = "Nicholas";
    obj = new Object();
    obj.name = "Greg";
    }
    var person = new Object();
    setName(person);
    alert(person.name); //"Nicholas"
    这个例子与前一个例子的唯一区别,就是在 setName() 函数中添加了两行代码:一行代码为 obj
    重新定义了一个对象,另一行代码为该对象定义了一个带有不同值的 name 属性。**在把 person 传递给
    setName() 后,其 name 属性被设置为 "Nicholas" 。---问题二:属性被修改后能在函数外部读取到,不就是引用类型嘛?后面的解释理解不了**然后,又将一个新对象赋给变量 obj ,同时将其 name
    属性设置为 "Greg" 。如果 person 是按引用传递的,那么 person 就会自动被修改为指向其 name 属性值
    为 "Greg" 的新对象。但是,当接下来再访问 person.name 时,显示的值仍然是 "Nicholas" 。这说明
    即使在函数内部修改了参数的值,但原始的引用仍然保持未变。实际上,当在函数内部重写 obj 时,这
    个变量引用的就是一个局部对象了。而这个局部对象会在函数执行完毕后立即被销毁。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • ︶紫魅 普通会员 1楼

      您的问题不太清楚,我需要更多的上下文才能更好地帮助您理解。

      1. 在JavaScript中,对象类型的引用值是可以通过构造函数来传递的。例如,如果您有一个名为Person的构造函数,您可以在Person的构造函数中使用Person构造函数来创建一个新的Person对象:

      ```javascript function Person(name) { this.name = name; }

      var person = new Person('John'); ```

      在这个例子中,Person构造函数的参数name是一个Person对象,所以这个name参数实际上是Person对象的一个引用。当您创建一个Person对象时,实际上是创建了一个与这个name参数指向同一个Person对象的引用。

      1. 另外,JavaScript的箭头函数也允许在函数体中使用参数引用。这可以通过在箭头函数的参数列表中使用...来实现:

      ```javascript function personWithName(name) { return { name: name }; }

      var person = personWithName('John'); ```

      在这个例子中,personWithName函数的参数列表是['John'],因此这个参数列表实际上是一个包含一个Person对象的数组。当您创建一个Person对象时,实际上是创建了一个与这个['John']数组中的name参数指向同一个Person对象的引用。

      希望这两个例子能帮助您理解JavaScript中的对象类型引用和箭头函数。如果您有任何其他问题,欢迎随时提问。

    更多回答
    扫一扫访问手机版