| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> JS面试题 -> 正文阅读 |
|
[JavaScript知识库]JS面试题 |
JS面试题1.判断 js 类型的方式1.typeof可以判断出’string’,‘number’,‘boolean’,‘undefined’,‘symbol’ 2. instanceof原理是 构造函数的 prototype 属性是否出现在对象的原型链中的任何位置
3.Object.prototype.toString.call()常用于判断浏览器内置对象,对于所有基本的数据类型都能进行判断,即使是 null 和 undefined 4. Array.isArray()用于判断是否为数组 2.ES5 和 ES6 分别几种方式声明变量ES5 有俩种: var 和 function 注意: let 、 const 、 class 声明的全局变量再也不会和全局对象的属性挂钩 3.闭包的概念?优缺点?闭包的概念:闭包就是能读取其他函数内部变量的函数。 优点: 缺点: 4.浅拷贝和深拷贝深拷贝和浅拷贝只针对像 Object, Array 这样的复杂对象。它们最根本的区别在于是否真正获取了一个对象的复制实体,而不是引用。简单来说,假设B复制了A,当修改B时,看A是否会发生变化,如果A变了,说明是浅拷贝;如果A没变,那就是深拷贝 浅拷贝
深拷贝
递归函数
5.数组去重的方法1.ES6 的 Set
2.reduce()
3.filter()
6.DOM 事件有哪些阶段?谈谈对事件代理的理解分为三大阶段:捕获阶段–目标阶段–冒泡阶段 事件代理简单说就是:事件不直接绑定到某元素上,而是绑定到该元素的父元素上,进行触发事件操作时(例如’click’),再通过条件判断,执行事件触发后的语句(例如’alert(e.target.innerHTML)’) 好处:(1)使代码更简洁;(2)节省内存开销 7.js 执行机制、事件循环JavaScript 语言的一大特点就是单线程,同一个时间只能做一件事。单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着。JavaScript 语言的设计者意识到这个问题,将所有任务分成两种,一种是同步任务(synchronous),另一种是异步任务(asynchronous),在所有同步任务执行完之前,任何的异步任务是不会执行的。 我们不禁要问了,那怎么知道主线程执行栈为空啊?js 引擎存在monitoring process 进程,会持续不断的检查主线程执行栈是否为空,一旦为空,就会去 Event Queue 那里检查是否有等待被调用的函数。换一张图片也许更好理解主线程的执行过程: 说完 JS 主线程的执行机制,下面说说经常被问到的 JS 异步中 宏任务(macrotasks)、微任务(microtasks)执行顺序。JS 异步有一个机制,就是遇到宏任务,先执行宏任务,将宏任务放入 Event Queue,然后再执行微任务,将微任务放入 Event Queue,但是,这两个 Queue 不是一个 Queue。当你往外拿的时候先从微任务里拿这个回调函数,然后再从宏任务的 Queue 拿宏任务的回调函数。如下图: 8.介绍下 promise.allPromise.all()方法将多个Promise实例包装成一个Promise对象(p),接受一个数组(p1,p2,p3)作为参数,数组中不一定需要都是Promise对象,但是一定具有Iterator接口,如果不是的话,就会调用 1.如果所有的Promise对象(p1,p2,p3)都变成fullfilled状态的话,生成的Promise对象(p)也会变成fullfilled状态,p1,p2,p3三个Promise对象产生的结果会组成一个数组返回给传递给p的回调函数。 2.如果p1,p2,p3中有一个Promise对象变为rejected状态的话,p也会变成rejected状态,第一个被rejected的对象的返回值会传递给p的回调函数。 9.async 和 await主要考察宏任务和微任务,搭配promise,询问一些输出的顺序 原理:async 和 await 用了同步的方式去做异步,async 定义的函数的返回值都是 promise,await后面的函数会先执行一遍,然后就会跳出整个 async 函数来执行后面js栈的代码 10.ES6 的 class 和构造函数的区别class 的写法只是语法糖,和之前 prototype 差不多,但还是有细微差别的,下面看看: 1 严格模式 2.不存在提升
3.方法默认是不可枚举的 4.class 的所有方法(包括静态方法和实例方法)都没有原型对象 prototype,所以也没有[[construct]],不能使用 new 来调用。 5.class 必须使用 new 调用,否则会报错。这是它跟普通构造函数的一个主要区别,后者不用 new 也可以执行。 6.ES5 和 ES6 子类 this 生成顺序不同 7.ES6可以继承静态方法,而构造函数不能 11.transform、translate、transition 分别是什么属性?CSS 中常用的实现动画方式 这里可以补充下 transition 和 animation 的比较,前者一般定义开始结束两个状态,需要有触发条件;而后者引入了关键帧、速度曲线、播放次数等概念,更符合动画的定义,且无需触发条件 12.介绍一下rAF(requestAnimationFrame)专门用来做动画,不卡顿,用法和setTimeout一样。对 rAF 的阐述MDN资料 13.javascript 的垃圾回收机制讲一下定义:指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束。 像 C 这样的编程语言,具有低级内存管理原语,如 malloc()和 free()。开发人员使用这些原语显式地对操作系统的内存进行分配和释放。 内存生命周期中的每一个阶段: 分配内存 — 内存是由操作系统分配的,它允许您的程序使用它。在低级语言(例如 C 语言)中,这是一个开发人员需要自己处理的显式执行的操作。然而,在高级语言中,系统会自动为你分配内在。 使用内存 — 这是程序实际使用之前分配的内存,在代码中使用分配的变量时,就会发生读和写操作。 释放内存 — 释放所有不再使用的内存,使之成为自由内存,并可以被重利用。与分配内存操作一样,这一操作在低级语言中也是需要显式地执行。 四种常见的内存泄漏:全局变量,未清除的定时器,闭包,以及 dom 的引用 14.对前端性能优化有什么了解?一般都通过那几个方面去优化的?1.减少请求数量 |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 7:21:28- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |