• js中的内存空间


    目的:

    1、如果不了解存储位置在程序中可能出现出乎意料的值改变

    2、可以很好的了解闭包

    3、可以对性能优化有一定分析能力提升

    js的数据类型

    js基础类型:undefined、null、boolean、string、number

    js的引用类型:array、function、object

    es6提供新的数据结构:set、map

    堆内存和栈内存

    栈内存:效率更高,能申请的空间较小
    堆内存:效率更低,能申请的空间更大

    不同类型的存储位置

    基础类型是在栈内存空间

    引用类型的引用地址在栈内存空间

    内存地址指向的值在堆内存空间

    不同类型在传递过程中的区别

    直接上代码

    let a = 1
    let b = a
    b = 2
    console.log(a,b);//1,2
    
    let obj1 = {a:'1'}
    let obj2 = obj1
    
    obj2.a = '2'
    console.log(obj1,obj2);//{a:'2'},{a:'2'}
    
    

    上边代码中b=a是重新开辟一个栈空间存放b变量,所以a和b都是独立的内存空间

    而obj1和obj2的赋值只是开辟了一个新的栈内存,里边放的还是obj1的引用地址,两个都是指向堆内存中的{a:'1'}

    所以改变obj2时改变的实际上是堆内存中变量,所以obj1也随着变化了

    函数间传递

    function setTest(){
        let s = new Set([1,2,3])
        changeSet(s)
        console.log(s);//Set(2){1,2}
        let arr = [1,2,3]
        changeArr(arr)
        console.log(arr);//[1,5,3]
    }
    
    function changeSet(set){
        set.delete(3)
    }
    function changeArr(arr){
        arr[1] = 5
    }
    
    setTest()
  • 相关阅读:
    管理者的四种不同授权风格
    centos7 未启用swap导致内存使用率过高。
    Dynamically create a div element with JavaScript/jQuery
    sql server: Parent/Child hierarchy tree view
    视频编解码系列(一)压缩编码基础常识
    mac 常用终端命令
    Linux下安装Python3.6.8
    SQL特殊字符转义
    Ehcache缓存监控
    指标管理体系设计
  • 原文地址:https://www.cnblogs.com/wyongz/p/16042885.html
Copyright © 2020-2023  润新知