
JavaScript
文章平均质量分 67
JavaScript知识点及面试常问
bdundun
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
前端模块化规范
AMDCMDCommon JSES Module原创 2022-01-04 21:25:36 · 362 阅读 · 0 评论 -
DOM&DOM事件流&BOM
DOM是文档对象模型,是HTML的编程接口。HTML和DOM是一一对应的关系。对DOM的操作有增删改查。**查询DOM结点**:法一,通过document上的函数:document.getElementById('idname')document.getElementsByTagName('标签名')//返回NodeList 动态的 不可遍历document.getElementsByClassName('类名')//返回NodeList法二,通过CSS选择器查询DOM结点:原创 2021-12-19 12:55:01 · 167 阅读 · 0 评论 -
图片懒加载
<script> const imgs=document.querySelectorAll('img'); window.addEventListener('scroll',(e)=>{ imgs.forEach(img=>{ const imgTop=img.getBoundingClientRect().top; if(imgTop<window.innerHeight){原创 2022-01-04 21:32:05 · 297 阅读 · 0 评论 -
js手写题——this关键字&箭头函数&函数原型上的方法call apply bind
基础概念、基本用法和应用场景:call和apply都是函数对象的方法,需要通过函数对象来调用。当对函数调用call()和apply()时都会调用函数执行。(即fun()=fun.call()=fun.apply())在调用call和apply()时可以将一个对象指定为第一个参数,此时这个对象将会成为函数执行时的this。(即call()里参数是谁,this就代表谁)而通过函数调用,this永远是window。call()方法可以将实参在对象之后依次传递,如fun.call(obj,2,3);app原创 2021-11-26 22:13:33 · 247 阅读 · 0 评论 -
js手写题——防抖(debounce)和节流(throttle)
防抖或是节流:限制函数的执行次数防抖:作用:防止用户在短时间内,大量高频地重复点击按钮,导致触发大量请求。应用场景:例如用户注册。知识点:setTimeout() clearTimeout()通过setTimeout()的方式,在一定时间间隔内,将多次触发变成一次触发。节流:减少一段时间的触发频率手写防抖:手写节流:......原创 2021-12-15 17:06:59 · 1197 阅读 · 0 评论 -
js手写题——setTimeout和setInterval
## setTimeout是如何实现的对于需要延迟执行的任务,如定时器任务,在 Chrome 中除了正常使用的消息队列之外,还有另外一个消息队列,这个队列中维护了需要延迟执行的任务列表,叫**延迟队列**。处理完消息队列中的一个任务之后,就开始执行 ProcessDelayTask 函数。ProcessDelayTask 函数会根据发起时间和延迟时间计算出到期的任务,然后依次执行这些到期的任务。等到期的任务执行完成之后,再继续下一个循环过程。使用setTimeout的注意事项:1,如果当前任务执行原创 2022-01-04 21:29:02 · 936 阅读 · 0 评论 -
js手写题——浅拷贝与深拷贝
浅拷贝:只拷贝一层,更深层对象级别的只拷贝引用(即地址) <script> var obj={ id:1, name:'andy', msg:{ age:18 } } var o={}; // for(var k in obj){ // o[k]=obj[k]; .原创 2021-11-25 10:51:56 · 179 阅读 · 0 评论 -
js手写题——数组去重和数组扁平化&对象扁平化
涉及到很多数组的api,要好好复习并掌握!数组去重时间复杂度最高的两层for循环方法: for(let i=0;i<arr.length;i++){//获取数组中的每一个元素 for(let j=i+1;j<arr.length;j++){//获取当前元素后的所有元素 if(arr[i]===arr[j]){//判断两个元素是否相等 arr.splice(j,1);原创 2021-12-07 18:07:19 · 816 阅读 · 0 评论 -
js手写题——typeof和instanceof
实现typeoftypeof缺陷:用typeof检查引用类型 object、null、array、function、Date都会返回字符串’object’ ,如 typeof array (返回’object’)为什么用Object.prototype.toString.call(obj)检测对象类型?深入理解Object.prototype.toString.call()对于为什么不能是Object.toString()/obj.prototype.toString()?看完上面两篇文章和下图就原创 2021-12-07 16:58:34 · 240 阅读 · 0 评论 -
js手写题——高阶函数&函数柯里化&compose函数&ES6装饰器
高阶函数以函数作为参数/以函数作为返回值/常用于作为函数装饰器常用高阶函数:防抖Debounce和节流Throttlejs手写题——防抖和节流 Promise、setTimeout等等为什么要使用高阶函数?减少非纯函数的数量,增加系统稳定性与可靠性,纯函数方便做单元测试。函数柯里化函数式编程思想,既能减少代码冗余,也能增加可读性。它利用高阶函数,通过函数调用继续返回函数的形式,将接收多个参数转换为多次接收参数最后统一处理。理解函数柯里化function curry(fn,currArgs){原创 2021-11-27 08:20:59 · 296 阅读 · 0 评论 -
ES6_Map和Set数据结构
Map:类似于对象,也是键值对的集合,但是键的范围不限于字符串,各种类型的值(包括“对象”)都可以作为键。Map也实现了iterator接口,所以可以使用扩展运算符和for…of…进行遍历。Map的属性和方法:size、set、get、has、clear(返回undefined) <script> let m=new Map(); m.set('name','尚硅谷'); console.log(m);//{"name" => "尚硅原创 2021-11-26 22:32:47 · 655 阅读 · 0 评论 -
ES6_async/await
用 promise.then 也是相当复杂,虽然整个请求流程已经线性化了,但是代码里面包含了大量的 then 函数,使得代码依然不是太容易阅读。基于这个原因,ES7 引入了 async/await,这是 JavaScript 异步编程的一个重大改进,提供了在不阻塞主线程的情况下使用同步代码实现异步访问资源的能力,并且使得代码逻辑更加清晰。await后面要跟一个promise实例对象async函数=生成器函数+执行器函数.........原创 2022-01-04 19:58:36 · 377 阅读 · 0 评论 -
ES6_迭代器和生成器
迭代器:Iterator是一种接口,任何数据结构只要部署了Iterator接口,就可以完成遍历操作。是对象的一种属性:Symbol.iterator,这个属性是个函数。Symbol(Symbol.iterator) const arr=[1,2,3,4]; let iterator=arr[Symbol.iterator]();//arr[Symbol.iterator]表示调用arr对象的属性//Symbol.iterator,其是个函数,所以括号表示调用,函数调用返原创 2021-11-26 22:17:42 · 133 阅读 · 0 评论 -
ES6_Promise
通过回调任务的层层嵌套来保证异步任务的执行顺序,但是会出现回调地狱。为什么需要Promise?有了Promise对象,可以将异步操作以同步操作的流程表达出来,避免了回调地狱。Promise是ES6引入的异步编程的新解决方案(传统解决方案:回调函数和事件),简单来说Promise是一个容器,里面封装了一个未来才会结束的事件(通常是异步操作)的结果。从语法上说,Promise是一个对象,从它可以获取异步操作的消息。Promise对象有两个特点:1>此对象的状态不受外界影响。有三种状态:pending原创 2021-11-26 22:25:40 · 189 阅读 · 0 评论 -
ES6_类(class)
类class面向对象的特性:封装性,继承性,多态性(同一个对象在不同时刻可以体现出不同的状态)。//ES6之前 function Point(x,y){ this.x=x; this.y=y; }//定义构造函数 Point.prototype.toString=function(){ return '('+this.x+','+this.y+')'; }//在构造函数原创 2021-11-25 09:15:17 · 203 阅读 · 0 评论 -
js_继承&new
原型链继承构造函数继承组合继承原型式继承原创 2021-12-07 15:40:19 · 719 阅读 · 0 评论 -
js_Ajax(Fetch&Axios)
Ajax什么是Ajax?Ajax是浏览器提供的一套方法,可以实现在不刷新页面的情况下向服务器端发送请求,从而更新数据,提高用户浏览网站应用的体验。Ajax运行原理:Ajax相当于浏览器发送请求与接收响应的代理人,以实现在不影响用户浏览页面的情况下局部更新页面数据,从而提高用户体验。Ajax实现原理?(使用原生js实现Ajax请求) var xhr = new XMLHttpRequest();// 创建XMLHttqRequest xhr.open('GET', '原创 2021-11-26 22:08:38 · 790 阅读 · 0 评论 -
js_原型与原型链
## 原型**原型prototype**:解析器会向创建的函数中添加一个属性prototype,prototype属性指向一个对象,这个对象就是原型对象。原型对象中有一个属性constructor,它又指向函数对象。原创 2021-11-25 10:34:51 · 121 阅读 · 0 评论 -
js_数据类型
数据类型六个原始数据类型:undefined,null,Number,String,Boolean,Symbol一个引用数据类型:Objectnull和undefined的区别:null值表示一个空对象指针类型:typeof null === ‘object’typeof undefined = 'undefined’数值:Number(null) === 0Number(undefined) === NaNSymbol:作用:保证每个属性的名字都是独一无二的,实现一个唯一的不重复的原创 2021-11-25 09:06:58 · 112 阅读 · 0 评论 -
js_闭包和闭包应用场景
如何产生闭包?当一个嵌套的内部(子)函数引用了嵌套的外部(父)函数的变量(函数)时,就产生了闭包。闭包到底是什么?闭包(closure)指的是那些引用了另一个函数作用域中变量的函数,通常是在嵌套函数中实现的。(闭包是一个函数,一个作用于可以访问另一个函数的局部变量)产生闭包的条件?函数嵌套且内部函数引用了外部函数的数据(变量/函数),执行内部函数定义时就会产生闭包(不用调用内部函数,但是外部函数必须调用才会产生闭包)。常见的闭包:1,将函数作为另一个函数的返回值(fn外面的作用域可以访问fn内部的局部原创 2021-11-25 10:46:28 · 526 阅读 · 0 评论 -
js_作用域与作用域链(静态)
作用域:全局作用域和函数作用域作用域在函数定义时就已经确定了,而不是在调用时(那是上下文对象)。执行上下文(对象)从属于所在的作用域。作用域是静态的,只要函数定义好了就一直存在且不会再变化。执行上下文是动态的,调用函数时创建,调用结束就会自动释放。作用域链:(里面可以看到外面变量,外面看不到里面。)多个上下级关系的作用域形成的链,方向是从内向外的。(内部上下文可以通过作用域链访问外部上下文中的一切,但外部上下文无法访问到内部上下文中的任何东西)。查找变量时就是沿着作用域链来查找的。作用域链增强:原创 2021-11-25 10:38:20 · 280 阅读 · 0 评论 -
js_执行上下文(动态)与执行上下文栈
每个上下文都有一个关联的变量对象。全局执行上下文:在执行全局代码前将window确定为全局执行上下文;对全局数据预处理;开始执行全局代码。函数执行上下文:在调用函数准备执行函数体之前,创建对应的函数执行上下文对象;对局部数据预处理;开始执行函数体代码。执行上下文栈:在全局代码执行前,JS引擎就会创建一个栈来存储管理所有的执行上下文对象;在全局上下文对象(window)确定后,将其入栈;在函数执行上下文对象创建后,压栈;当前函数执行完后,将栈顶对象出栈;当所有代码执行完后,栈中只剩下window。.原创 2021-11-25 10:36:32 · 509 阅读 · 0 评论 -
js_var let const 和变量提升
1,var let const 和变量提升①var声明的范围是函数作用域(即包含var的函数的局部变量),let和const都是块作用域②var声明的变量会自动提升到包含它的函数顶部,但是初始化(即赋的值)不会提升,所以打印的话会显示undefined。let声明的变量不会在作用域中被提升。暂时性死区:在区块内,let声明此变量之前,该变量虽已存在但都不可用。③var可以重复声明,let不允许重复声明。const与let行为基本相同,唯一重要区别是在声明同时必须初始化。......原创 2021-11-24 22:06:20 · 545 阅读 · 0 评论