• js总结笔记


    一.数据类型
    1.js的基本数据类型
    • string
    • number
    • boolean
    • null
    • undefined
    • symbol
    2.js的复杂数据类型
    • object
    • array
    • function
    3.数据类型的使用
    typeof可以判断undifend/数值/字符串/布尔值
    instanceof可以用于判断具体类型     具体用法:a   instanceof   Object返回结果为true或者forth
    undefind和null的区别:undefind表示定义但是未赋值,null表示已经赋值了但是赋的值为null
    什么时候需要赋值为null:1.初始赋值为null,表明将要赋值为对象,确定对象就赋值
                                              2.结束前,让对象成为垃圾对象(被垃圾回收器回收)
    4.原型和原型链
    prototype:每个函数都有,指向原型对象
    —proto—:隐式原型,每个对象都会有,指向构造该对象的构造函数的原型
    原型链:根据prototype和—proto—串成的一条链,查找对象的某一个内容时,如果找到了就停止并返回,未找到就到原型或隐式原型中继续找,直到找到或者隐式原型为null
    二.闭包

    1.闭包的产生

    在js里,当存在函数嵌套,并且在函数的内部引用了函数外部的数据的时候,闭包就产生了。
    例如:
    function fn(){
    var a = 1
    function fn1(){
    console.log(a)
    }
    }

    2.闭包的特性

    闭包内的数据在函数执行完之后不会被垃圾回收器回收,因此可以延长部分数据的生命周期,同时使函数外部可以对函数内部的数据进行相关的操作。但是这一特性也会引起一些问题,比如当闭包无用之后但是没有及时回收,就会产生内存溢出和内存泄露。

    3.内存溢出

    当程序运行所需的内存超出了剩余可分配的内存时,就会产生内存溢出,是一种程序运行出现的错误。                                                                                                                                             

    4.常见的内存泄露

    1.意外的全局变量
    2.没有及时清理的计时器和回调函数
    3.闭包                                            
    因此,闭包虽然好用,但是可以不用的时候尽量不要用,用了的话要及时清除。
    三.改变样式的三种方法

    1.直接操作dom改变样式

    这种方法容易理解,适用于初学者使用,虽然简单,但是会严重影响性能,因此不建议使用。
    原因:传统开发模式中,每次js改变dom,都会造成一次重绘重排,而有时对某一个元素需要进行如背景色、字体颜色、字体大小等等多方面的修改,因此会多次执行更新操作,严重浪费浏览器性能。
    1. window.onload=function(){
    2. document.getElementById("file-btn")
    3. const btn = document.getElementById('modeBtn');
    4. btn.addEventListener('click', (e) => {
    5. const body = document.body;
    6. if (e.target.innerHTML === '🌞'){
    7. body.style.backgroundColor = 'black';
    8. body.style.color = 'white';
    9. e.target.innerHTML = '🌜';
    10. }else{
    11. body.style.backgroundColor = 'white';
    12. body.style.color = 'black';
    13. e.target.innerHTML = '🌞';
    14. }
    15. });
    16. }

    2.通过改变class类名改变样式

    这种方法比起上一种好了太多,不仅增加了代码的可读性,避免代码臃肿,在性能消耗上也比上一种代码好了不知道多少。
    1. window.onload=function(){
    2. document.getElementById("file-btn")
    3. const btn = document.getElementById('modeBtn');
    4. btn.addEventListener('click', (e) => {
    5. const body = document.body;
    6. if (body.className !== 'night') {
    7. body.className = 'night';
    8. } else {
    9. body.className = '';
    10. }
    11. });
    12. }

    3.不使用js就能改变样式

    这个是先在外面写一个类型为checkbox的input框,然后通过样式设置为display:none隐藏。
    1. <input id="modeCheckBox" type="checkbox">
    2. <div class="content">
    3. <header>
    4. <label id="modeBtn" for="modeCheckBox"></label>
    5. </header>
    6. </div>
    将label直接与input框相连,点击即可改变input框是否选中,然后再通过input的选中与否来决定样式的。通过伪类来改变样式。
    1. #modeCheckBox {
    2. display: none;
    3. }
    4. #modeCheckBox:checked+.content {
    5. background-color: black;
    6. color: white;
    7. transition: all 1s;
    8. }
    9. #modeBtn {
    10. font-size: 2rem;
    11. float: right;
    12. }
    13. #modeBtn::after {
    14. content: '🌞';
    15. }
    16. #modeCheckBox:checked+.content #modeBtn::after {
    17. content: '🌜';
    18. }

     

  • 相关阅读:
    Linux的hwclock命令笔记221109
    【TES720D-KIT】青翼科技支持双网口的全国产化四核CPU+FPGA处理器开发套件
    动手学大模型应用开发--Chapter 05如何评估大模型应用
    深度学习中常用的注意力模块及其原理和作用
    ​JAVA设计模式(十)——装饰模式
    跨国企业如何选择安全靠谱的跨国传输文件软件?
    传奇服务端GOM引擎和GEE引擎区别在哪里?
    Mysql的主键UUID、自增ID、雪花算法到底该怎么选择?(荣耀典藏版)
    推荐系统中的公平性
    linux静态库与动态库
  • 原文地址:https://blog.csdn.net/mhc20201554114/article/details/126591944