深拷贝和浅拷贝的区别 递归函数 js中this指向问题

本文介绍了JavaScript中浅拷贝与深拷贝的区别,强调了浅拷贝共享引用类型可能导致的副作用,以及递归函数的概念,包括递归调用和终止条件。同时,解析了JavaScript中this关键字在不同上下文下的行为,特别提到了箭头函数的this指向特性。
摘要由CSDN通过智能技术生成

1)深拷贝和浅拷贝的区别
  浅拷贝是指创建一个新对象,复制原始对象的值到新对象中,如果原始对象的属性是引用类型,则只复制引用,而不是复制引用指向的对象。也就是说,新对象和原始对象会共享同一个引用类型的属性。
当进行浅拷贝时,如果修改新对象中的引用类型的属性,原始对象中的相应属性也会被修改,因为它们指向同一个引用。
  浅拷贝一般使用 Object.assign()、扩展运算符(...)或 Array.slice() 等方法实现。
深拷贝是指创建一个新对象,尽管它的结构与原始对象相同,但是它是原始对象的完全独立的副本。也就是说,新对象和原始对象不会共享引用类型的属性。
 当进行深拷贝时,无论修改新对象还是原始对象中的引用类型的属性,彼此之间都不会互相影响。
深拷贝一般需要通过递归或使用库函数(如 JSON.parse(JSON.stringify(object)))来实现。

2)什么是递归函数
递归函数是一种函数在其定义中调用自身的编程技巧。递归是一种常用的问题解决方法,它基于将一个复杂问题拆分成更小、相似的子问题来解决。递归函数在处理这些子问题时,会不断地调用自身,直到达到一个基本情况(终止条件)时停止,并返回结果。
递归函数通常由两部分组成:
递归调用:函数在其定义中调用自身,用于解决规模更小的子问题。
终止条件:定义在递归函数中的一个条件,用于判断是否需要继续递归调用。若满足终止条件,则递归停止。
递归函数的工作原理可以理解为不断地将大问题划分成小问题,通过解决小问题来逐步解决大问题。每次递归调用都会带着一个较小规模的子问题,直到达到终止条件并开始回溯,最终得到问题的解
3)js的this指向问题
this 不是固定不变的,它会随着执行环境的改变而改变。

在浏览器里,在全局范围内this 指向window对象;
在函数中,this永远指向最后调用他的那个对象;
构造函数中,this指向new出来的那个新的对象;
call、apply、bind中的this被强绑定在指定的那个对象上;
箭头函数中this比较特殊,箭头函数this为父作用域的this,不是调用时的this.要知道前四种方式,都是调用时确定,也就是动态的,而箭头函数的this指向是静态的,声明的时候就确定了下来;
apply、call、bind都是js给函数内置的一些API,调用他们可以为函数指定this的执行,同时也可以传参

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值