zoukankan      html  css  js  c++  java
  • 函数按引用传参问题

    今天看到一个朋友在群里问了一个问题,代码如下

    var foo = {n:1};
    (function(foo){            
        var foo;               
        console.log(foo.n);    // 1
        foo.n = 3;             
        foo = {n:2};           
        console.log(foo.n);    // 2
    })(foo);
    console.log(foo.n);  //3

    很好奇为什么结果打印的是1 2 3。那在这里分析下,首先在函数外部定义的变量foo属于全局变量,此时在栈内存中给它分配一个物理地址,假如为x1,同时赋值时x1对应的变量foo指向堆中的对象{n:1},而在函数内部定义的变量foo属于局部变量,她会在内存中新开辟一个地方去存放,地址设为x2, 按理说这两个变量在栈中应该相互独立,互不干扰。但是由于foo是引用类型的,在函数中按引用类型传值就想当于x1和x2指向同一个堆内存地址。所以就有了以下解释:

    当你微笑的时候,全世界都会对你微笑。
  • 相关阅读:
    2019nc#7
    ABC133F
    2019DX#6
    2019DX#5
    2019dx#4
    解决一般图最大匹配——带花树算法
    2019nc#4
    B-generator 1_2019牛客暑期多校训练营(第五场)
    hdu-6638 Snowy Smile
    hdu-6621 K-th Closest Distance
  • 原文地址:https://www.cnblogs.com/liruoruo/p/10148136.html
Copyright © 2011-2022 走看看