码农知识堂 - 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

  • 相关阅读:
    怎样使用kornia库中的LoFTR(Image matching example with LoFTR)
    低代码能为企业带来什么好处
    基于NIFI工具搭建生产级别的IIOT系统
    SimpleDateFormat线程不安全和DateTimeFormatter线程安全
    Django——模板
    【js】-【DFS、BFS应用】-学习笔记
    ts3.接口和对象类型
    Abbexa人猴痘病毒IgM (MPXV IgM) ELISA试剂盒
    C++ 手动实现单向循环链表(课后作业版)
    二叉树题目:从中序与后序遍历序列构造二叉树
  • 原文地址:https://blog.csdn.net/qq_42774501/article/details/126879555
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号