• 堆、栈


    var a = 20;
    var b = a;
    b = 30;
    
    // 这时a的值是多少?
    

    问题2:

    var a = { name: '前端开发' }
    var b = a;
    b.name = '进阶';
    
    // 这时a.name的值是多少
    

    问题3:

    var a = { name: '前端开发' }
    var b = a;
    a = null;
    
    // 这时b的值是多少
    

    现在来解答一下,三个问题的答案分别是20‘进阶’{ name: '前端开发' }

    • 对于问题1,a、b都是基本类型,它们的值是存储在栈中的,a、b分别有各自独立的栈空间,所以修改了b的值以后,a的值并不会发生变化。
    • 对于问题2,a、b都是引用类型,栈内存中存放地址指向堆内存中的对象,引用类型的复制会为新的变量自动分配一个新的值保存在变量对象中,但只是引用类型的一个地址指针而已,实际指向的是同一个对象,所以修改b.name的值后,相应的a.name也就发生了改变。
    • 对于问题3,首先要说明的是null是基本类型,a = null之后只是把a存储在栈内存中地址改变成了基本类型null,并不会影响堆内存中的对象,所以b的值不受影响
  • 相关阅读:
    How Many Answers Are Wrong
    Agri-Net —poj1258
    食物链
    A Bug's Life
    畅通工程
    Shortest path of the king
    Alex and Number
    KMP
    快速幂
    0x04
  • 原文地址:https://www.cnblogs.com/alaner/p/15149407.html
Copyright © 2020-2023  润新知