js原型原型链,闭包,深浅拷贝

1.原型​-原型链

1.1原型

在 JavaScript 中,每个对象都有一个与之关联的原型(prototype),用于实现继承和共享属性。一个对象的原型就是它的构造函数的 prototype 属性。我们可以通过 Object.getPrototypeOf() 方法获取一个对象的原型。一个对象的原型也可以被称为该对象的父对象。

1.2原型链:__proto___

JavaScript 原型链是对象间相互关联的一个链接,它是由每个对象的原型属性指向它的原型对象所形成的链式结构。当通过一个属性查找时,如果当前对象没有这个属性,则会沿着原型链往上查找,直到找到该属性或者到达原型链的顶端,即原型为 null 的对象。

具体地说,当我们访问对象的属性时,JS 引擎会先在对象本身上查找是否有这个属性,如果查找不到,就会在对象的原型上查找,如果还是没有,则会在原型的原型上查找,直至找到该属性或者到达原型链的顶端。如果一直找到原型链的顶端还未找到该属性,则返回 undefined

​2.闭包函数

闭包函数是指在函数内部创建另一个函数,并在该内部函数中使用外部函数作用域中的变量。闭包函数可以访问在父函数外定义的变量,并持有对这些变量的引用。

闭包函数的优点包括:

  1. 可以访问外部函数中定义的变量:闭包函数可以访问外部函数中的局部变量,这样可以使得代码更加简练,避免了全局变量的污染。

  2. 延长变量生命周期:由于闭包函数可以访问外部函数中定义的变量,所以对于需要持久化数据的业务场景,可以使用闭包函数来延长变量的生命周期。

  3. 隐藏实现细节:闭包函数可以隐藏外部函数的实现细节,使得代码更加清晰易懂。

但闭包函数也存在一些缺点:

  1. 容易导致内存泄漏:由于闭包函数可以长期持有对外部函数作用域中变量的引用,所以如果没有正确地管理闭包函数的生命周期,容易导致内存泄漏。

  2. 可读性差:过于深层嵌套的闭包函数可能会使代码难以理解和维护。

  3. 可能存在副作用:由于闭包函数可以修改外部函数的变量,所以可能会导致不可预期的副作用,需要谨慎使用

3.深浅拷贝

深拷贝和浅拷贝是指在将一个对象从源复制到目标的操作中,新对象是否与原始对象共享内存地址。

浅拷贝只复制对象的引用,而不是对象本身。此时,在新对象和原对象中通常会共享一些对象的状态和行为,如弱引用、共享内存和共享内部缓存。简单来说,浅拷贝会拷贝所有原始对象的属性的值,但对于引用类型的属性,只是拷贝了对象的引用,而不是整个对象。

深拷贝是复制对象的所有值,包括所有嵌套对象和子对象,而不是复制他们的引用。这意味着,在新创建的对象和原始对象之间不存在共享状态和行为。简单来说,深拷贝会拷贝原始对象的属性及其对应的所有子属性。

简单来说,浅拷贝只是拷贝了对象的引用,深拷贝则是真正地拷贝了整个对象。在实际开发中,我们需要根据具体的场景来选择使用深浅拷贝。

一般情况下,如果要复制的目标对象的属性值都是基本类型的数据,那么使用浅拷贝即可;而如果目标对象中还包含引用类型的属性,且需要对目标对象和源对象进行独立的操作,那么就需要使用深拷贝了。

在JavaScript中,有多种方法可以实现深浅拷贝,如使用Object.assign()、展开运算符(...)、JSON.parse()和JSON.stringify()等。

4.防抖&节流

防抖和节流都是为了解决频繁触发事件而导致性能问题的问题。

防抖:指在一定时间内,如果事件被触发多次,只执行最后一次。比如说,当用户在搜索框中输入关键字时,我们不希望每输入一个字就发送一次请求,而是等待用户输入完成后再发送请求。这时候就可以使用防抖技术,设置一个定时器,在用户输入完成后一定时间内没有再次触发事件,才执行请求。

节流:指在一定时间内,只执行一次事件。比如说,当用户滚动页面时,我们不希望每滚动一下就执行一次事件,而是等待一定时间后再执行。这时候就可以使用节流技术,设置一个定时器,在一定时间内只执行一次事件。

总的来说,防抖和节流都是为了优化性能,避免频繁触发事件导致的性能问题。防抖是在一定时间内只执行最后一次事件,而节流是在一定时间内只执行一次事件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值