学习记录1.13

闭包:

可以访问外部函数的变量,在内层函数中访问到外层函数的作用域. 她可以创建私有变量,延长变量的生命周期。

 function father()

{

Var name = “baiyun”;

 function son()

{

Console.log(name,”name”);

}

son()

}

father();

柯里化函数的应用:目的在于避免频繁调用具有相同参数函数的同时,又能够轻松的重用

// 假设我们有一个求长方形面积的函数

function getArea(width, height) {

    return width * height

}

// 如果我们碰到的长方形的宽老是10

const area1 = getArea(10, 20)

const area2 = getArea(10, 30)

const area3 = getArea(10, 40)

// 我们可以使用闭包柯里化这个计算面积的函数

function getArea(width) {

    return height => {

        return width * height

    }

}

const getTenWidthArea = getArea(10)

// 之后碰到宽度为10的长方形就可以这样计算面积

const area1 = getTenWidthArea(20)

// 而且如果遇到宽度偶尔变化也可以轻松复用

const getTwentyWidthArea = getArea(20)

应用:

  1. 数据封装: 闭包允许创建私有变量,通过函数的返回值暴露有限的访问方式,实现数据封装。
  2. 模块化开发: 闭包可以用于实现模块化的代码结构,将一些功能封装在闭包中,只暴露必要的接口。
  3. 回调函数: 闭包常常用于实现回调函数,尤其是在异步编程中,通过闭包可以保持对外部作用域的引用。
  4. 定时器和事件处理: 在定时器和事件处理中,闭包可以用于保存状态信息,以便在定时器或事件触发时使用。

优点:

  1. 数据封装: 闭包允许将数据封装在函数内,避免全局变量的污染,提高代码的可维护性。
  2. 保持状态: 闭包可以捕获外部函数的状态,使得函数在后续调用中能够记住之前的状态,有助于实现某些功能。
  3. 模块化: 闭包支持模块化开发,可以将功能划分为更小的单元,提高代码的复用性和可读性。

缺点:

  1. 内存消耗: 闭包中保留了外部作用域的引用,可能导致内存消耗较大,特别是在闭包函数体内包含大量变量或对象时。

nexttick:

因为vue更新dom是异步执行的。当修改数据的时候 vue会开启一个异步队列  视图不会第一时间就进行更新 而是等所有异步队列数据都变化完毕 才会进行统一更新 

如果想要在修改数据后立刻得到更新后的DOM结构,可以使用Vue.nextTick()

 更改数据后当你想立即使用js操作新的视图的时候需要使用它。 比如说 数据改变后重新获取焦点

现在有一个场景就是有一个div 使用v-if来判断它是否出现 点击一个按钮 v-if的值会改变 变成true的时候 div出现 并获取input框中的值, 如果v-if的值是 false,直接去获取div内容是获取不到的,因为此时div还没有被创建出来,那么应该在点击按钮后,改变v-if的值为 true,div才会被创建,此时再去获取,

可以使用这个函数

因为获取值的时候想要实现的效果就是 输入框一出现就自动获取焦点 并拿到里面的值。this.$refs.inputTitle.focus()不在外面嵌套$nextTick,就会出错, 因为vue是在执行完函数时候判断数据是否改变 在进行重新获取焦点 也就是说函数执行完之后input框才可见 然后获取焦点是在函数内执行的。

所以就要使用nexttick函数。因为nexttick方法是在渲染完页面之后这才执行的 就可以正常获取焦点了

————————

应用的场景是:

在created生命周期钩子里,因为这个时候未挂载DOM,若在此阶段进行DOM操作一定要放在Vue.nextTick()的回调函数中。

nextTick方法主要是使用了宏任务和微任务,定义一个异步方法,多次调用nextTick会将方法存在队列中,通过这个异步方法清空当前队列。所以这个nextTick方法就是异步方法

  

其实用方法一般为 this.$nextTick( ()=>{} ), 为了不影响this指向,一般为箭头函数。

    methods: {

      getedit(){

          this.isDisabled = false

          this.$nextTick(function(){

  this.$refs.inputTitle.focus() //获取焦点

})

      }

    }

20.浏览器的垃圾回收机制

1.标记清除

这个算法,分标记清楚两个阶段,标记就是为所有的活动对象做一个标记,清除阶段就是把没有标记(非活动对象)销毁

首先对所有的内存进行标记,然后从根对象遍历,还是被上下文变量使用就清除标记,然后清理所有带有标牌的变量,销毁并且回收他们所占用的空间,最后垃圾回收程序做一次内存清除。d

到那时他有一个缺点就是会存在很多内存碎片。需要通过标记整理策略进行解决。

标记清除算法的优点是:对比引用计数算法,标记清除算法最大的优点是能够回收循环引用的对象,它也是v8引擎使用最多的算法。

2.引用计数

当对象被引用的次数是0,那就进行回收,但是循环引用的时候,两个对象都至少被引用了一次,因此导致内存泄漏

(不再用到的内存,没有及时释放,就叫做内存泄漏。因为不用的内存用改被垃圾回收机制回收,但是某种原因,他没有被回收,就叫做内存泄漏)

引用计数算法缺点:

  • 无法回收循环引用的对象;
  • 空间开销比较大;

7.内存泄漏

内存泄漏是指不再用到的内存,没有及时释放。既不能使用,又不能回收。

导致内存泄漏的几种常见情况:

  • 1.意外形成全局变量
    解决方法:加上 ‘use strict’ 启用严格模式来避免这类问题, 严格模式会阻止你创建意外的全局变量.
  • 2.闭包
    解决方法:在函数外部定义事件处理函数,解除闭包。或在闭包中,删除没用的属性以减少对内存的消耗。或在外部函数中删除对DOM的引用。
  • 3.清除页面dom元素时,dom元素绑定的事件未解绑
    解决办法:手工移除事件。
  • 4.循环引用

function fn() {

 var a = {};

 var b = {};

 a.pro = b;

 b.pro = a;

fn();

解决办法:手工解除循环引用。

  • 5.未清除的计时器或延时器
    解决办法:clearTimeout(),clearInterval()。

宏任务和微任务  &   同步任务和异步任务

同步任务:在主线程上排队执行的任务,只有前一个任务执行完毕才能执行下一个任务,是由js执行栈决定的;

异步任务:不进入主线程,而是进入任务了队列的任务,当主线程中的任务运行完成了,才会从任务队列中取出异步任务,放入主线程中执行

微任务和宏任务都是异步任务,它们都属于一个队列

宏任务:script、setTimeout、setInterval、postMessage、MessageChannel、及Node.js 环境中的setImmediate.

微任务:Promise.then、Object.observe、MutationObserver、及Node.js 环境中的process.nextTick.

  • Promise.then( )/catch( ) 。注意,Promise本身同步,只是它里面的then/catch的回调函数是异步的微任务

执行顺序就为: 同步任务 ---> 微任务 ---> 宏任务

堆和栈

堆里存放着一些对象。而栈中则存放着一些基础类型变量以及对象的指针

基本类型 保存在栈中 引用类型保存在堆中

cookie session

Js如何实现继承

==和===

  • 两个都为简单类型,字符串和布尔值都会转换成数值,再比较
  • 简单类型与引用类型比较,对象转化成其原始类型的值,再比较
  • 两个都为引用类型,则比较它们是否指向同一个对象
  • null 和 undefined 相等
  • 存在 NaN 则返回 false

#

两个操作数在不转换的前提下相等才返回 true。即类型相同,值也需相同

Js类型转换机制

显示转换和隐式转换

自动转换为布尔值

在需要布尔值的地方,就会将非布尔值的参数自动转为布尔值,系统内部会调用Boolean函数

可以得出个小结:

  • undefined
  • null
  • false
  • +0
  • -0
  • NaN
  • ""

除了上面几种会被转化成false,其他都换被转化成数值

自动转化成字符串     +

除了+ 会把运算转化成字符串 其他运算符会转化成数值

浅拷贝:就是基本类型拷贝值,引用类型拷贝内存地址,只拷贝最外面一层,不会递归的去拷贝;

可以使用object.assign array.prototype.concat() 和 object.prototype.slice() 扩展运算符

这样的操作通常用于对象的浅拷贝,即创建了一个新对象,该对象与原始对象共享相同的属性值,但是它们在内存中是两个独立的对象。

深拷贝:

Js方面的所有题背完

多文本省略:overflow:hidden text; overflow:ellipsis ; white-space:nowarp;

多行文本:display:-webkit-box 伸缩盒子 -webkit-line-clamp:2; 2行 -webkit-orient:vertical; overflow:hidden; text-overflow:ellipsis

New操作符做了什么: 创连绑this

  1. 先创建了一个新的对象newObj
  2. 将新对象newObj与构造函数通过原型链进行连接
  3. 将构造函数的this绑定到新对象newObj
  4. 根据构建函数返回类型作判断,如果是值类型,返回newObj。如果是引用类型,就返回这个引用类型的对象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/630463.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用springboot mybatis写一个增删改查

首先&#xff0c;在pom.xml文件中添加Spring Boot、MyBatis和MySQL的相关依赖&#xff1a; <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency&g…

PuTTY的ppk密钥与OpenSSH密钥之间的相互转换

几个概念说明&#xff1a;id_rsa、id_rsa.pub、ppk、pem 目前有两个主流的密钥格式&#xff1a;OpenSSH格式的密钥 和 PuTTY格式的密钥。 id_rsa和id_rsa.pub 都是OpenSSH格式的密钥。 id_rsa是OpenSSH格式的SSH私钥。 id_rsa.pub是OpenSSH格式的SSH公钥。ppk文件 ppk文件是P…

c++基础2

一、c的引用 引用和指针的的区别&#xff1f; 引用是一种更安全的指针&#xff1a; 1. 引用必须初始化&#xff0c;指针可以不用初始化 int a 10; int *p; // 指针可能是野指针 int &b a;//引用赋值"&#xff0c;通常指的是直接修改引用所引用的对象的值&#xff0…

【每日随笔】远离美女 ② ( 各个时代的择偶需求 | 美女的社交溢价 | 颜值保质期 )

文章目录 一、各个时代的择偶需求1、原始社会择偶需求2、古代社会择偶需求3、现代社会择偶需求 二、美女的社交溢价与颜值保质期1、美女的社交溢价2、颜值保质期 一、各个时代的择偶需求 1、原始社会择偶需求 在之前提到过 , 美女 基因稳定 , 原始社会 婴儿 夭折率太高 , 只有…

JavaScript之视频相关API

目录 一、视频标签基本API1. play(开始)2.muted(静音)3. pause(暂停)4. volume(声音控制)5. webkitRequestFullScreen(全屏) 二、视频标签进度条API1. 总时间API&#xff08;duration&#xff09;2.当前时间API&#xff08;currentTime&#xff09; 二、进度条拉动效果 一、视频…

Qt/QML编程之路:小键盘keyboard(36)

小键盘对于qml应用是经常用到的,在qml里面,就如一个fileDialog也要自己画一样,小键盘keyboard也是要自己画的,对于相应的每个按键的clicked都要一一实现的。 这里有一个示例: 代码如下: import QtQuick 2.5 import QtQuick.Controls 1.4 import QtQuick.Window 2.0 im…

yum仓库以及NFS共享

yum实现过程 1.光驱里自带yum 2.网络下载到本地 3.直接通过网络 如何实现安装服务 yum客户端找到yum服务端&#xff0c;找到yum的仓库位置&#xff0c;下载元信息&#xff0c;因为里面有软件的位置&#xff0c;因此可以找到软件包的位置&#xff0c;然后下载到本地 仓库的类…

25考研英语复习计划

Hello各位小伙伴大家好&#xff0c;今天要给大家分享的是英语备考计划&#xff0c;大家可以作为参考&#xff0c;制定适合自己的备考计划。 【英一/二】 英语分为英一、英二&#xff0c;一般学硕英一&#xff0c;专硕英二。 英一要比英二难度大。 【复习计划】 1-2月&#xf…

图深度网络浅层理解

图神经网络 1.输入&#xff1a; 图网络 2.输出&#xff1a; 节点类别、某两个节点的新连接、产生新的图或子图 3.端到端表示学习&#xff08;Representation Learning&#xff09;/图嵌入&#xff1a; 将节点映射为d维的向量&#xff0c;d维向量就包含了这个节点的连接关系…

H5小游戏如何提升APP变现收益?

在当前用户规模稳定但变现压力增加的背景下&#xff0c;开发者需要挖掘用户价值&#xff0c;提高营收&#xff0c;这成为开发者关注的重点话题。对于那些“用户用完即走”的APP产品来说&#xff0c;接入H5游戏能够吸引停留&#xff0c;为其带来收入上的增长。 一、什么是H5游戏…

小程序学习-17

attached最常用 推荐使用 lilfetimes 这种方法

springcloud Eureka服务注册与发现

文章目录 代码地址Eureka基础知识什么是服务治理什么是服务注册与发现 单机版eurekaServerIDEA生成eurekaServer端服务注册中心类似物业公司EurekaClient端cloud-provider-payment8001修改EurekaClient端cloud-consumer-order80 集群Eureka构建步骤新建cloud-eureka-server7002…

计算机找不到iutils.dll的5种有效的解决方法,一分钟教会修复dll问题

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中最常见的就是“某某文件丢失”或“某某文件损坏”&#xff0c;找不到iutils.dll就是其中之一。iutils.dll是一个系统级的动态链接库文件&#xff08;DLL&#xff09;&#xff0c;它是Windows操作系统…

grep 在运维中的常用可选项

一、对比两个文件 vim -d <filename1> <filename2> 演示&#xff1a; 需求&#xff1a;&#xff5e;目录下有两个文件一个test.txt 以及 text2.txt,需求对比两个文件的内容。 执行后会显示如图&#xff0c;不同会高亮。 二、两次过滤 场景&#xff1a;当需要多…

(一)ROS的安装

&#xff08;一&#xff09;安装ubuntu18.04 系统&#xff08;虚拟机或者是物理机&#xff0c;在此不再介绍&#xff09; &#xff08;二&#xff09;添加ROS镜像源 apt 列表中没有ROS源&#xff0c;所以要手动添加 sudo sh -c . /etc/lsb-release && echo "deb…

美易官方:Vision Pro上市在即‘高端体验与舒适度的权衡’

随着科技的不断进步&#xff0c;虚拟现实&#xff08;VR&#xff09;、增强现实&#xff08;AR&#xff09;和混合现实&#xff08;MR&#xff09;设备日益成为科技爱好者和专业人士关注的焦点。作为市场上备受期待的高端头显&#xff0c;Vision Pro即将在美国当地时间1月19日开…

在vite5和vue3开发环境中使用jodit4富文本编辑器,并添加自定义插件和使用highlight.js实现代码块高亮(附其他自定义配置项和全部代码)

最近富文本编辑器jodit终于更新发布到了4.0版本&#xff0c;加入了css变量、有更好的typescript支持&#xff0c;截止发文时的版本是&#xff1a;4.0.5&#xff0c;看到有了新版本于是便想着将本地项目中的jodit版本也进行升级&#xff0c;琢磨着再丰富和添加一些功能&#xff…

掌握Python 99 个实用实例,其中精选算法高频题目以及答案,助力求职Python工程师面试不慌拿offer

掌握Python 99 个实用实例&#xff0c;其中精选算法高频题目以及答案&#xff0c;助力求职Python工程师面试不慌拿offer。 Python由荷兰国家数学与计算机科学研究中心的吉多范罗苏姆于1990年代初设计&#xff0c;作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构&…

给机器人开发个功能让它帮我照看宝宝

本文首发于古月居 这篇博客主要讲述了如何通过OriginBot来看护宝宝&#xff0c;当宝宝的脸不在摄像头的范围之内时&#xff0c;发送消息到钉钉群组&#xff0c;通知家人及时查看。 前言 我在上个月有了宝宝&#xff0c;为了方便照看宝宝&#xff0c;就买了一个带有宝宝看护功能…

OpenLayers实战,OpenLayers点聚合有相同经纬度坐标时无法展开问题解决办法,当缩放级别达到一定等级后强行展开聚合为单个点

专栏目录: OpenLayers实战进阶专栏目录 前言 本章用于解决OpenLayers使用Cluster点聚合情况下,要素(Feature)出现有相同经纬度坐标时无法展开成单独图标的问题解决办法以及当缩放级别达到一定等级后强行展开聚合为单个点的功能。 本章展开后由于经纬度坐标还是同一个点,…