-
李茂志
- 什么是闭包
当一个函数内返回另一个函数时,返回的那个函数叫做闭包函数 - 什么是函数柯里化
局部套用,利用了闭包的原理,保存了程序的执行结果 - 什么是函数防抖
短时间内快速触发同一个事件,执行之前先干掉上一次,保证只执行最后一次(电梯门) - 什么是函数节流
单位时间内,只允许触发一次(地铁闸机口)
- 什么是闭包
-
李飞
- 什么是原型链
对象调用属性或方法时,先在自身查找,找到了就是使用,找不到就一次向上层原型查找,任意一层找到,就停止并使用,直到顶层,还找不到,就抛出undefined - 什么是Event Loop
Event Loop:事件循环机制
宏任务:一般用来执行同步程序,和部分异步程序
所有的同步程序都是宏任务:计时器,dom事件,ajax
微任务:一般用来执行异步程序抛出的其他功能
只有部分异步程序是微任务
微任务一定会在当前宏任务结束后,再开始执行 - 简单介绍Promise的使用
promise是为了优化回调地狱的问题,解决异步程序的- 作为实例使用:被new执行,创建一个promise实例
p.then(成功,失败)
p.catch(所有失败)
(链式调用)then和catch的回调函数的返回值
(链式调用的优点)可读性好,方便调错,节省内存 - 作为对象使用,使用promise的类方法
promise类的方法:all一个失败为catch,全部成功才执行then
any()一个成功执行then,全部失败才执行catch
race(赛跑)只要有一个结束就结束
allSettled所有的promise都结束,不管成功失败都会触发then,参数为每个实例的状态和数据
promise.resolve()成功状态的promise
promise.reject()失败状态的promise
- 作为实例使用:被new执行,创建一个promise实例
- 什么是数据劫持,如何实现数据劫持
拦截数据的访问和修改,在数据被其他程序访问和修改时,执行附带的其他自定义功能
如何实现:自定义实现:自定义数据的访问方法和修改方法
get和set关键字
- 什么是原型链
-
邹雨楉
- ES6新增了哪些特性
声明关键字:let、const、箭头函数、展开运算符、解构赋值、字符的操作方法、反引号、数据类型:symbol、数据结构:set,map、遍历语句for-of - 常见的模块化规范有哪些
ECMAScript前端模块化
CommonJS后端模块化 - 如何实现ES6的模块化
暴露关键字:export{变量名或函数名}可以多次使用
export default 对象名:只能使用一次
引入模块关键字:import “文件路径+文件名”
import{暴露时的名字} from “文件路径+文件名”
使用了export default暴露时使用:import 任意名字 from “文件路径+文件名” - 什么是单例模式,特点是什么
单个实例,整个应用使用过程中只出现一个实例,就算被多次调用也只有一个实例存在
特点:节省性能
- ES6新增了哪些特性
-
杜亚晨
- 有哪些本地存储技术,及其特点
localStorage 永久
sessionStorage 会话级
cookie 默认会话级,可修改4K 50条 - 什么是Ajax
ajax前后端交互的桥梁,可以在前后端中进行数据传输
优势:可以异步加载新数据,破坏了前进后退功能,破坏了搜索引引擎优化,提高了首屏加载速度
使用:四步走:创造载体、设置请求、状态监听、发送数据 - 什么是跨域
在浏览器中,使用XMLHttpRequest,发起请求时,发起请求方和被请求方没有遵守同源策略并且被请求方没有设置“访问控制允许源”信息,就会被同源策略阻止的情况,就叫跨域
解决跨域:服务器代理、JSONP、CORS - json有什么特点
- 必须是字符,不能是双引号字符
- 必须遵守花括号对象或中括号对象形式
- 如果是花括号对象形式,键必须使用双括号包裹
- 数据结尾不能出现没有意义的逗号
- 不允许出现函数,undefined,NaN
- 有哪些本地存储技术,及其特点
-
吴志明
-
什么是服务器代理
不使用浏览器,使用服务器发起请求
客户端A,请求服务端B
搭建临时服务端a,服务端a访问服务端B,客户端a在请求临时服务端A中的数据,即可实现 -
Object.defineProperty和Proxy的区别是什么
defineProperty只能劫持现有数据,不能劫持之后添加的数据,proxy可以 -
如何实现闭包
- 将一个函数作为一个返回值使用叫做闭包
-
Object类身上有哪些常见方法
Object.defineProperty
Object.definePropertiesObject.create创建
Object.assign合并
Object.is判断
Object.setPrototypeOf
Object.getPrototypeOf
-
-
new的原理
- 创建新对象
- 改变this指向到这个新函数
- 将新对象的原型链(proto)指向原函数的原型对象(prototype)
- 执行原函数内的功能
- 检测原函数是否主动返回对象,如果没有,返回这个新对象
-
array类的方法
- array.from:创建新数组,实现伪转真
- array.of:弥补new创建数组的缺陷
- array.isArray:判断数组和对象,返回布尔值
-
箭头函数的特点
- 自身没有this绑定,自动指向外层this
- 不能被new执行
- 伤害了代码的可读性
-
let的声明变量
- 不会被绑定到window
- 不允许重复声明
- 存在块级作用域,一个花括号就是一个作用域
- 存在暂时性死区
- 不存在提升
-
如何解决跨域问题
- 服务器代理
- JSONP:使用网页自带的请求方式,script标签默认会将引入的文本内容作为js代码解析
- CORS策略:纯后端操作
一、12月30日提问
-
尤志轩
- 什么是原型链(ok)
对象调用属性或方法时,先在自身查找,找到了就使用,找不到就依次向上层原型查找,任意一层找到,就停止并使用,直到顶层,还找不到,就抛出undefined - ES5新增的数组的常见方法(不会)
pop 末尾删除
push 末尾添加
shift 首位删除
unshift 首位添加
join 使用连接符
reverse 翻转数组
concat 合并数组
indexOf 数据查索引
lastindexOf 索引查数据
slice 截取(开始,结束)
splice 删除并插入(开始,个数,插入数据)
sort 排序
foeach 遍历数据(参数:回调函数)
map 遍历数组并修改
filter 遍历数组并筛选数据(参数:回调函数)
some 遍历数组并验证(遇true即停)
every 遍历数组并验证(遇false即停)
reduce - 什么是函数防抖和节流
函数防抖:类似于电梯门,执行下一次之前必须干掉上一次,只执行最后一次
函数节流:类似于地铁闸机,一定时间内只执行一次 - Object.defineProperty和Proxy的区别
defineProperty只能劫持现有数据,不能劫持之后添加的数据
- 什么是原型链(ok)
-
柳梦蝶
-
什么是Ajax
Ajax是前后端交互的桥梁,可以在前后端中相互传输数据,Ajax不是一个技术,他是多个技术的结合
优势:可以异步加载数据,但是破坏了前进后退功能,破坏了搜索引擎的优化,提高了首屏加载速度,可以提高了用户体验 -
this的常见指向情况
没有明确隶属对象的函数,被直接执行时,指向window,严格模式指向undefined
有明确隶属对象的函数,被直接执行时,指向当前对象
隐式丢失:将有明确的隶属对象的函数赋值给变量或作为参数传入另一个函数,通过新变量或参数执行,此时this会重新指回window
强制绑定:通过函数(call,apply,bind)强行修改this指向,this指向了指定的内容
new绑定:通过关键字new执行函数时,this指向new出来的新对象 -
函数的方法及其区别
call:第一个参数:要改变的this指向,之后的参数可以传多个,自动执行
apply:第一个参数:要改变的this指向,第二个参数:一个数组,会自动解析,自动执行
bind:第一个参数:要改变的this指向,之后的参数可以传多个,按需执行
区别:
相同点:call、apply、bind都是改变this指向的,第一个参数都是要改变的this指向,他们都不会改变原数据
不同点:call和apply都会自动执行并且返回原数值,而bind是按照需要手动执行,返回值是改变this指向后的新函数,call和bind第一个参数之后可以传入多个参数,会传入原函数,被形参接收,而apply只可以传两个参数,第二个是一个数组,他可以自动解析,将解析的数据传入原函数之后被形参接收。 -
本地存储技术有哪些,特点
localstorage:5K,永久级
sessionstorgae:5K,会话级,关闭及结束
cookie:4K,50条,会话级,可以设置时间
-
-
李婷婷
- 数组的map和filter有什么区别
map:遍历数组并修改
filter:遍历数组并筛选数据(参数:回调函数) - 如何实现Ajax请求(不会)
四步走:
创造载体 const xhr = new XMLHttpRequset()
设置请求 xhr.open(“get”, url);
状态监听 xhr.onreadystatechange = function(){···}
发送数据 xhr.send() - 什么是同源策略
协议、域名、端口都相同的称为同源策略 - ES6的模块化规范
ECMAScript官方
暴露关键字:export{变量名或函数名}可以多次使用
export default 对象名:只能使用一次
引入模块关键字:import “文件路径+文件名”
import{暴露时的名字} from “文件路径+文件名”
- 数组的map和filter有什么区别
-
谷静杰
-
什么是闭包函数
当一个函数内返回另一个函数时,返回的函数那个叫做闭包函数 -
如何实现对象的深拷贝
深拷贝:地址就是值,值就是地址,不会会改变原数据
浅拷贝:拷贝的是地址,会改变原数据 -
如何区分数组和对象和null
Array.isArray()判断对象还是数组 -
如何翻转字符
将字符转成数组,使用reverse
使用for循环,挨个重新赋值
-
-
马文彪
-
Promise类有哪些方法
all:一个失败执行catch
any :一个成功执行then
race:赛跑
allSettled 所有的promise都结束,都会触发then
promise.resolve()成功状态的promise
promise.reject() 失败状态的promise -
如何实现class继承
改变this指向
原型对象prototype继承
原型链继承__proto__继承
混合继承:改变this指向+原型指向
ES6新增的class继承:语法层面上的继承,不需要主动处理this或原型指向 -
json的语法要求
必须是字符,不能是双引号字符
必须遵守花括号对象或中括号对象形式
如果是花括号对象形式,键名必须使用双引号包裹
不允许出现函数和undefined、NaN
数据结尾不能出现没有意义的逗号 -
如何获取3天之后的日期对象
let d2 = new date();
d2.setDate(d2.getDate()+3);
-
-
张向阳
-
js的数据类型有哪些
string、number、bouldean、function、undefined、null、Symbol -
对象的分类
宿主对象、内置对象、本地对象 -
非字符型数据转字符的结果分别是什么
一般情况套双引号(数值、布尔、undefined、null)
花括号对象默认转为为[object Object]
数组将中括号里的内容换成引号 -
什么是深浅拷贝,如何实现深拷贝
深拷贝:地址就是值。值就是地址,拷贝的是值,不会改变原数据
浅拷贝:地址就是地址。值就是值,拷贝的是地址,会改变原数据
浅拷贝:直接进行赋值修改
深拷贝:for-in遍历数组、json、展开依次进行拷贝
-
-
字符的方法
charAt 索引查字符
indexOf 字符查索引
slice 截取片段,大于0,从左到右,小于0,从右到左
substring 截取个数,参2在参1之前,自动调换,小于0,按照0处理
concat 字符拼接
replace 查找并替换
charCodeAt 转unicode编码
toUpperCase 转大写
toLowerCase 换小写
search 根据规则查索引
match 根据规则查索引
2023/1/3
- 吴彦栋
- 什么是递归(不会)
在函数内部执行自身,并返回执行结果 - 什么是闭包,闭包的原理
在一个函数内部返回另外一个函数,返回的这个函数叫做闭包函数 - 什么函数柯里化
局部套用,利用了闭包的原理,保存了程序的执行结果
- 什么是递归(不会)
- 李子舰
- prototype和__proto__分别是什么,有什么区别(不全)
prototype是原型对象,__proto__是原型链
区别:当前对象的__proto__必然会指向创建自身的构造函数的prototype
除了箭头函数之外所有的函数都有原型对象,用来被new自身函数创造出来的对象的__proto__指向 - 什么是作用域链
子可以调用父,父不能调用子,兄弟之间不能相互调用,作用域嵌套向上查找,找不到,严格模式下访问设置都报错,非严格模式下,访问会报错,设置自动生成全局 - 数组的方法有哪些(ok)
push、pop、shift、unshift、indexof、lastindexof、reverse、map、some、every、foreach、reduce、join、concat、slice、splice、sort、filter
- prototype和__proto__分别是什么,有什么区别(不全)
- 程帅
- 非数值数据转数值分别会得到什么(不会)
true为1,false为0
null为0
空数组为0
有且只有一个能严格(转成数值型数据)的数据的数组,转为当前值
数组的其他形式,花括号对象,函数,undefined,都是NaN - 非布尔数据转布尔分别会得到什么(ok)
字符:非空字符为true,空字符为false
数值:非0为true,0为false
对象,数组,函数都为true
undefined和null和NaN都是false - let和var的区别是什么(ok)
- 不会被绑定到window
- 不允许重复声明
- 存在块级作用域,一个花括号就是一个作用域
- 存在暂时性死区
- 不存在提升
- 非数值数据转数值分别会得到什么(不会)
- 马文昌
- 什么是数据劫持,如何实现(不全)
拦截数据的访问和修改,在数据被其他程序访问和修改时,执行附带的其他自定义功能
如何实现:自定义实现:自定义数据的访问方法和修改方法
get和set关键字 - 如何实现ES6模块化(ok)
暴露关键字:export{变量名或函数名}可以多次使用
export default 对象名:只能使用一次
引入模块关键字:import “文件路径+文件名”
import{暴露时的名字} from “文件路径+文件名” - 使用版本管理时,如何本地仓库的版本比远程仓库版本落后,如何将本地上传到远程(不全)
- 什么是数据劫持,如何实现(不全)
- 位江波
- 面向对象编程的三大特点(不会)
封装、继承、多态 - 箭头函数有什么特点
- 自身没有this绑定,自动指向外层this
- 不能被new执行
- 伤害了代码的可读性
- 字符串有哪些常用方法(不会)
charAt 索引查字符
indexOf 字符查索引
slice 截取片段,大于0,从左到右,小于0,从右到左
substring 截取个数,参2在参1之前,自动调换,小于0,按照0处理
concat 字符拼接
replace 查找并替换
charCodeAt 转unicode编码
toUpperCase 转大写
toLowerCase 换小写
search 根据规则查索引
match 根据规则查索引
- 面向对象编程的三大特点(不会)