2021年的几次面试让我死磕了17道JS手写题!
【摘要】 1、浅拷贝、深拷贝的实现浅拷贝// 1. ...实现let copy1 = {...{x:1}}// 2. Object.assign实现let copy2 = Object.assign({}, {x:1})深拷贝javascript深拷贝和浅拷贝以及实现方法(推荐)_纸飞机博客-CSDN博客_js浅拷贝和深拷贝的区别深拷贝和浅拷贝的区别?浅拷贝: 将原对象或原数组的引用直接赋给新对象,新...
1、浅拷贝、深拷贝的实现
浅拷贝
深拷贝
2、手写防抖节流函数
3、instanceof (考察对原型链的理解)
instanceof作用:判断一个实例是否是其父类或者祖先类型的实例。
instanceof 在查找的过程中会遍历左边变量的原型链,直到找到右边变量的 prototype查找失败,返回 false。
4、实现数组的map方法
5、实现 new 方法
6、实现call&apply&bind
call
apply(arguments[this, [参数1,参数2.....] ])
bind
更多实现:
7、手动实现promise
8、手写原生AJAX
步骤
-
创建 XMLHttpRequest 实例
-
发出 HTTP 请求
-
服务器返回 XML 格式的字符串
-
JS 解析 XML,并更新局部页面
不过随着历史进程的推进,XML 已经被淘汰,取而代之的是 JSON。
了解了属性和方法之后,根据 AJAX 的步骤,手写最简单的 GET 请求。
基于promise实现:
9、柯里化函数的实现
柯里化函数的定义:将多参数的函数转换成单参数的形式。
柯里化函数实现的原理:利用闭包原理在执行可以形成一个不销毁的作用域,然后把需要预先处理的内容都储存在这个不销毁的作用域中,并且返回一个最少参数函数。
问法有很多,比较全面的可看该文:
10、实现一个双向数据绑定
11、rem 基本设置
12、手写发布订阅
发布订阅模式的发布和订阅都由一个调度中心来处理
发布订阅模式是完全解耦的,因为调度中心中存的直接就是逻辑处理函数
要点:都要实现添加/删除/派发更新三个事件。
13、数组去重的实现
该题比较灵活,答题时可根据题目选取最便捷的写法。
14、实现数组拍平
参考:
15、实现斐波那契数列
参考:
16、实现图片懒加载
与普通的图片懒加载不同,如下这个多做了 2 个精心处理:
- 图片全部加载完成后移除事件监听;
- 加载完的图片,从 imgList 移除;
17、实现一个JSONP
JSONP 核心原理:script 标签不受同源策略约束,所以可以用来进行跨域请求,优点是兼容性好,但是只能用于 GET 请求。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)