• 在JS中关于堆与栈的认识function abc(a){ a=100; } function abc2(arr){ arr[0]=0; }


        平常我们的印象中堆与栈就是两种数据结构,栈就是先进后出;堆就是先进先出。下面我就常见的例子做分析:

    main.cpp

    int a = 0; 全局初始化区

    char *p1; 全局未初始化区

    main()

    {

    int b; 栈

    char s[] = "abc"; 栈

    char *p2; 栈

    char *p3 = "123456"; 123456在常量区,p3在栈上。

    static int c =0; 全局(静态)初始化区

    p1 = (char *)malloc(10); 堆

    p2 = (char *)malloc(20); 堆

    }

    不知道你是否有点明白了,堆和栈的第一个区别就是申请方式不同:栈(英文名称是stack)是系统自动分配空间的,例如我们定义一个 char a;系统会自动在栈上为其开辟空间。而堆(英文名称是heap)则是程序员根据需要自己申请的空间,例如malloc(10);开辟十个字节的空间。由于栈上的空间是自动分配自动回收的,所以栈上的数据的生存周期只是在函数的运行过程中,运行后就释放掉,不可以再访问。而堆上的数据只要程序员不释放空间,就一直可以访问到,不过缺点是一旦忘记释放会造成内存泄露。

           数据类型分为值类型和引用类型,基本数据类型就是值类型,存放在栈内存中;引用类型存放在堆内存中

    总结:

    (1)在JS中数组类型就是引用类型,所以存放在堆之中,就是说数组的地址存放在堆中,而数组的值存放在栈中。一般的数据比如var a=10;此时就会在栈中开辟一个新的空间用于存放a;而var a=[1,2,3,4];此时数组a的地址存放在堆中,而地址指向的值就会在栈中。

    JS文件:

    function abc(a){
    a=100;
    }

    function abc2(arr){
    arr[0]=0;
    }

    /********************************************************************************************************************/

    /* //值传递和引用传递
    //1.值传递
    var b=0.01;
    abc(b);
    alert(b);

    输出:0.01
    //数组是引用类型,传递的是地址
    var arr1=[123,2343,435];
    abc2(arr1);
    for(var i=0;i<arr1.length;i++){
    document.writeln(arr1[i]+" ");

    输出:0 2323 435

    (2)注意区分值传递和地址传递的不同

  • 相关阅读:
    centos7下更新firefox
    Centos7宽带连接
    CAS和AQS
    java中锁的概念
    并发队列
    Callable和Future
    juc下的并发工具类和线程池
    死锁和线程安全的问题
    HashMap源码分析(java1.8)
    List集合框架面试题
  • 原文地址:https://www.cnblogs.com/imysql/p/5352337.html
Copyright © 2020-2023  润新知