码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • JS高阶:深入理解数据、变量、内存


    深入理解JS中的数据、变量以及内存

    • 数据
    • 内存
      • 内存的理解
      • 一个内存中有两个数据
      • 内存分类
    • 变量
    • 内存,数据,变量三者之间的关系
    • JS传递变量是值传递还是地址传递?
    • 引用变量赋值问题(重点,深入理解)
      • 案例一
      • 案例二
      • 案例三
      • 案例四
      • 案例五
      • 案例六

    数据

    数据在内存中代表指定信息的“东西”,本质上是010101二进制

    数据的特点
    可传递、可运算
    在这里插入图片描述
    在这里插入图片描述

    内存

    内存的理解

    可存储数据的空间

    一个内存中有两个数据

    内存存储的数据(变量)、地址值(引用地址)

    内存分类

    栈内存:全局变量、局部变量
    堆内存:对象、引用数据类型

    变量

    可以变化的量,由变量名和变量值组成,每个变量都对应一块内存
    变量名用来查找对应的内存,变量值就是内存中存储的数据

    内存,数据,变量三者之间的关系

    内存用来存储数据的空间
    变量是内存的标识

    JS传递变量是值传递还是地址传递?

    回答一:值传递,这个值可以是基本数据也可以是引用数据(地址)
    回答二:把传递的地址看做是引用(地址)传递
    一般都会认为是地址传递,地址里面把存放的数据;其实深入理解就是值传递,这个值就是地址

    引用变量赋值问题(重点,深入理解)

    案例一

            var obj1={name:'LIDI',age:'25'}
            var obj2=obj1
            obj1.name='尤雨溪'
            console.log(obj2.name);//尤雨溪
    
    • 1
    • 2
    • 3
    • 4

    解析:第二行代码,是将obj1的内存内容赋值给obj2,这个内存内容就是地址值,两个变量指向同一个地址。
    结果为:尤雨溪

    案例二

        let obj1={name:'obj1'}
        let obj2=obj1
        obj2.age=12
        console.log(obj1.age);
    
    • 1
    • 2
    • 3
    • 4

    结果:12

    案例三

         var obj1={name:"老王"}
         var obj2=obj1
         function fn(obj){
            console.log(obj.name);
            // 这个obj就是obj1
            // 这一步是把obj中的name重新赋值了
            obj.name="小王"
         }
         fn(obj1)
         console.log(obj2.name);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    答案:老王 小王

    案例四

         let a={age:12}
         let b=a
         a={name:'Tom',age:13}
         //这里把a重新指向了一个新对象
         console.log(a);
         console.log(b.age);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    答案:Tom13
    12

    案例五

     let a={age:13}
        function fn1(obj){
            // 这里是重新指向了一个新对象
            // 局部变量在函数执行完后会自动销毁,无法访问
            obj={age:15}
        }
        fn1(a)
        console.log(a.age);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    答案:13

    案例六

       let a=3
        function fn(a){
            a=a+1
        }
        fn(a)
        console.log(a);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    答案:3

  • 相关阅读:
    【Linux】Crontab、Shell、Linux、Git
    原生js 多用途三元表达式 点赞按钮
    动态尺寸模型优化实践之Shape Constraint IR Part I
    Matlab--微积分问题的计算机求解
    如何优雅的使用装饰器模式
    CSP漫画工作室clipstudiopaint最新版本2022功能介绍
    Chapter 13 贝叶斯网络实践
    1V1音视频实时互动直播系统
    c语言中数组的四种创建方式和应用场景
    A公司与B公司xx项目互通测试解决方案模板
  • 原文地址:https://blog.csdn.net/qq_42774501/article/details/126879555
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号