学习记录1.13

这篇具有很好参考价值的文章主要介绍了学习记录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文章来源地址https://www.toymoban.com/news/detail-799520.html

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

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

到了这里,关于学习记录1.13的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (1)(1.13) SiK无线电高级配置(七)

    文章目录 前言 17 技术细节 18 名词解释 本文提供 SiK 遥测无线电(SiK Telemetry Radio)的高级配置信息。它面向\\\" 高级用户 \\\"和希望更好地了解无线电如何运行的用户。 在评估该无线电是否符合当地法规时,了解其使用的技术可能会有所帮助。 固件采用同步自适应时分复用( TDM )

    2024年02月01日
    浏览(46)
  • (1)(1.13) SiK无线电高级配置(六)

    文章目录 前言 15 使用FTDI转USB调试线配置SiK无线电设备 16 强制启动加载程序模式 17 名词解释  本文提供 SiK 遥测无线电(SiK Telemetry Radio)的高级配置信息。它面向\\\" 高级用户 \\\"和希望更好地了解无线电如何运行的用户。 配置 3D Radios 的推荐方法是使用任务规划器,如本文所述(

    2024年01月16日
    浏览(47)
  • pytorch 2.0初探:和pytorch 1.13的速度对比

    看到pytorch2.0出来了,而且宣传提速明显,一行代码即可提速43%左右: We then measure speedups and validate accuracy across these models. Since speedups can be dependent on data-type, we measure speedups on both float32 and Automatic Mixed Precision (AMP). We report an uneven weighted average speedup of  0.75 * AMP + 0.25 * float32  s

    2024年02月16日
    浏览(36)
  • 1.13|1.14|1.15|1.6、GDB调试

    输入这两条命令,第一条用于 生成 调式代码,第二条 运行 调试代码 test.c 需要与被调试的代码 test 在 同一个目录 下 list 默认显示 main 函数 ①用list查看代码 list 行号 ,显示 行号上下文 代码 list 函数名 ,表示显示 函数名上下文 的代码 list 文件名:行号 查看非当前文件的代

    2023年04月23日
    浏览(73)
  • 【js&vue】联合gtp仿写一个简单的vue框架,以此深度学习JavaScript

    lifecycle.js 注解: this.$options.beforeMount.call(this);与 this.$options.beforeMount();有什么区别: call(this)  的作用是将当前对象( this )作为参数传递给  beforeMount  方法,使得在  beforeMount  方法内部可以通过  this  访问到当前对象的上下文 直接调用了  beforeMount  方法,没有指定上下

    2024年02月09日
    浏览(53)
  • web前端javascript笔记——(13)事件(1)

    鼠标/键盘属性 altKey               返回当事件被触发时,“ALT”是否被按下。 button               返回当事件被触发时,哪个鼠标按钮被点击 clientX               返回当事件被触发时,鼠标指针的水平坐标。 clientY               返回当事件被触

    2024年01月25日
    浏览(50)
  • 前端项目部署自动检测更新后通知用户刷新页面(前端实现,技术框架vue、js、webpack)——方案一:编译项目时动态生成一个记录版本号的文件

    当我们重新部署前端项目的时候,如果用户一直停留在页面上并未刷新使用,会存在功能使用差异性的问题,因此,当前端部署项目后,需要提醒用户有去重新加载页面。 vue、js、webpack 编译项目时动态生成一个记录版本号的文件 轮询(20s、自己设定时间)这个文件,判断版

    2024年02月02日
    浏览(61)
  • JavaScript - 判断当前时间是否在指定区间内,例如:9:00~12:00(检查当前时间是否处于规定的两个时间段范围内),适用于 vue.js / uniapp / 微信小程序等前端项目

    例如,您想知道当前时间是否处于 9:00 ~ 12:00 时间区间内,然后根据这个判断进而实现业务逻辑。 如下示例所示, 本文提供一个函数,您只需要传入 2 个时间区间,便可得出当前时间是否在该时间区间范围内: 您可以一键复制,直接粘贴到您的项目中。 您只需要传入开始时

    2024年02月16日
    浏览(60)
  • 【前端学习记录】vue中使用el-upload组件时,上传文件进度条没有实时更新

    问题背景 今天在项目中遇到一个问题,使用el-upload组件时,上传文件进度条没有实时更新,需要手动点击一下才会更新。 原理及可尝试方案 el-upload 组件默认的进度条是通过 Ajax 请求上传文件,并且进度条通过监听 xhr.upload 的 progress 事件来实时更新。但是,有些浏览器在处

    2024年02月01日
    浏览(52)
  • 【PX4】Ubuntu20.04+ROS Noetic 配置PX4-v1.13和Gazebo11联合仿真环境【教程】

    写在前面,目前中文互联网上关于 PX4 飞控的学习资料较少,笔者查阅了大量的资料整理成这篇博客,贡献一些学习内容,码字不易,如果帮助到您,请您帮我点点赞。 安装Ubuntu可以查看这篇教程,安装ros可以查看这篇教程,这里就不再赘述了。 ● 在使用apt安装的过程中(

    2024年02月08日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包