8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

JavaScript 是按引用传递语言还是按值传递语言?

Rcfullscale 2月前

235 0

基本类型(数字、字符串等)通过值传递。然而,对象是未知的,因为它们都可以通过值传递(在这种情况下,我们认为保存对象的变量是

基本类型(数字、字符串等)通过值传递。但对象是未知的,因为它们既可以通过值传递(在这种情况下,我们认为保存对象的变量是对象的引用),也可以通过引用传递(我们认为对象的变量保存对象本身)。

虽然最终这并不重要,但我想知道传递参数约定的正确方式是什么。是否有 JavaScript 规范摘录,其中定义了关于此的语义应该是什么?

帖子版权声明 1、本帖标题:JavaScript 是按引用传递语言还是按值传递语言?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Rcfullscale在本站《arrays》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 它总是按值传递,但对于对象来说,变量的值是引用。因此,当您传递一个对象并更改其 成员 ,这些更改会在函数外部持续存在。这使得它 看起来 像按引用传递。但如果您实际更改对象变量的值,您将看到更改不会持续存在,证明它确实是按值传递。

    例子:

    function changeObject(x) {
      x = { member: "bar" };
      console.log("in changeObject: " + x.member);
    }
    
    function changeMember(x) {
      x.member = "bar";
      console.log("in changeMember: " + x.member);
    }
    
    var x = { member: "foo" };
    
    console.log("before changeObject: " + x.member);
    changeObject(x);
    console.log("after changeObject: " + x.member); /* change did not persist */
    
    console.log("before changeMember: " + x.member);
    changeMember(x);
    console.log("after changeMember: " + x.member); /* change persists */

    输出:

    before changeObject: foo
    in changeObject: bar
    after changeObject: foo
    
    before changeMember: foo
    in changeMember: bar
    after changeMember: bar
    
返回
作者最近主题: