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指向同一个堆内存地址。所以就有了以下解释:

    当你微笑的时候,全世界都会对你微笑。
  • 相关阅读:
    版本控制系统Git
    CI框架中一个类中调用另一个类中已经加载对象测试
    关于PHP的框架
    node之http模块
    airtest之脚本批量运行
    airtest之一个脚本在多设备上运行
    npm概念
    node概念
    python -m xx.py和python xx.py的区别
    命令行运行脚本
  • 原文地址:https://www.cnblogs.com/liruoruo/p/10148136.html
Copyright © 2011-2022 走看看