zoukankan      html  css  js  c++  java
  • 在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)注意区分值传递和地址传递的不同

  • 相关阅读:
    5个人的晚餐
    replace(),indexOf(),substring(),split(),join(),——各种小知识点
    2016-11-01——孤独留给自己,开心让给别人
    CMS3.0——初次邂逅express
    项目三(集团官网)——总结(2) 递归创建子目录
    项目三(集团官网)——总结(1) cookie
    jQuery_pager.js分页
    thinkjs——修改where默认条件为or
    优化之——查询数据库
    go net库
  • 原文地址:https://www.cnblogs.com/imysql/p/5352337.html
Copyright © 2011-2022 走看看