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%内容,订阅专栏后可继续查看/也可单篇购买
前端面试题 文章被收录于专栏
前端面试的一些常问问题、问题的具体实现(可直接运行)以及底层原理