JS:js编程题2(*****五颗星)

1.递归

经典js结构: 递归,闭包,立即执行函数

        递归: 函数中调用函数自己的结构

递归的两个要素: 1. 出口  2. 入口

入口: 进入递归(递归的逻辑)

出口: 什么时候跳出递归

最好先写出口,再写入口

<script>
       var i=0
       function fn(){
            i++
            if(i<5){//入口:进入递归(递归的逻辑)
                console.log(i)
                fn()
            }//出口:什么时候跳出递归
       }
       fn()
    </script>

1.阶乘的递归实现

阶乘: 3!  3*2*1

        需求: 求n的阶乘(函数封装)

<script>
        function fn(n){
            // 先写出口
            if(n<=1){
                return 1
            }
            return n*fn(n-1)//出口
        }
        console.log(fn(4))
</script>

2.深拷贝实现

拷贝-----浅拷贝(浅复制),深拷贝(深复制)

浅拷贝:

浅拷贝----for in 循环 将p1的每一个键值对赋值给p2,如果复制到引用地址,则不论哪一个对象修改都会相互影响

浅拷贝-----会发生一改全改的情况(数据安全的问题)

<script>
        var p1 = {
            name:"张三",
            age:20,
            gender:"男",
            favs:["javascript","css","html"],
            wife:{
                name:"王五",
                age:21,
                gender:"女",
                favs:["口红","面膜","衣服"]
            }
        }
        var p2={}
        // 浅拷贝----for in  循环  将p1的每一个键值对赋值给p2
        // 浅拷贝会发生一改全改的情况(数据安全的问题)
        for(let i in p1){
            p2[i]=p1[i]
        }
        p2.name="李四"
        p2.wife.age=18
        console.log(p1)
        console.log(p2)
</script>

深拷贝:

经典案例:

        深拷贝的实现原理: 保证拷贝的每一个键值对都是基本类型

            参数设计: 将p1拷贝到p2中   p1(当前对象cur)   p2(目标对象tar)

<script>
        var p1 = {
            name:"张三",
            age:20,
            gender:"男",
            favs:["javascript","css","html"],
            wife:{
                name:"王五",
                age:21,
                gender:"女",
                favs:["口红","面膜","衣服"]
            }
        }
        var p2={}
        function deepCopy(cur,tar){
            for(var k in cur){//for in会遍历实例成员和原型成员
                if(cur.hasOwnProperty(k)){//判断是不是实例成员
                    if(typeof cur[k]==="object"){//引用类型和基本类型的判断,判断是不是object类型,不是数组就是对象
                        // tar[k]=Object.prototype.toString.call(cur[k])==="[object Array]"?[]:{}//数组对象的判断
                        tar[k]=Array.isArray(cur[k])?[]:{}//判断是否是数组类型
                        deepCop

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

前端面试题 文章被收录于专栏

前端面试的一些常问问题、问题的具体实现(可直接运行)以及底层原理

全部评论
多谢整理汇总!
1 回复 分享
发布于 2023-02-17 14:30 广东
感恩的心 感谢有佬
1 回复 分享
发布于 2023-02-17 13:51 湖南

相关推荐

09-14 17:23
门头沟学院
故事和酒66:所以说副业很重要,程序员干到40岁,再怎么也赚300万了,吃吃利息也够活下去
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务