前端问题汇总(不定时更新)

157 阅读3分钟

1.typescript中,type:用来定义类型别名;

 举例:type myType = String|Number|Boolean;
 let student:myType = 'zyy';
 let student:myType = 20;
 let student:myType = true;

2.什么是纯函数?

概念:一个函数的返回结果只依赖其参数,并且执行过程中没有副作用
纯函数要满足以下三点:
	1.相同输入总是会返回相同的输出。
	2.不产生副作用。
	3.不依赖于外部状态。
纯函数的关键是避免对外部状态的依赖和修改,以及确保相同的输入始终产生相同的输出。

3.什么是高阶函数,常见的举例。

概念:高阶函数是一个接收函数作为参数或将函数作为输出返回的函数
举例:map,reduce,filter,sort

4.给dom添加多个点击事件

dom.addEventListener(事件名称,func)
dom.addEventListener(事件名称,func)
dom.addEventListener(事件名称,func)
	.......

5.数组sort()排序

默认使用UniCode排序,所以通常字母看a->z,数字看1->9

6.类似数组的对象,本质特征只有一个,那就是必须要有length属性;都可以通过Aarry.from()方法转成数组;

new_arr = Array.from(类似数组的对象)
常见的场景:获取的dom节点列表,普通函数的arguments对象
对于还没有部署该方法的浏览器,可以用Array.prototype.slice.call(xxx)方法替代
const toArray = (() =>
  Array.from ? Array.from : obj => [].slice.call(obj)
)();

7.判断数据类型

1typeof xxx
2Object.prototype.toString.call(xxx)

8.快速构建一个长度100的,填充内容的数组

new Array(100).fill(x) ---- 结果为[x,x,x,...]

9.判断一个数组的某个位置是否有值

位置index in Array;存在值为true,不存在值为false

10.常用Math方法

(1)Math.abs(x):获取x的绝对值;
(2)Math.ceil(x):向上取整;
(3)Math.foolr(x):向下取整;
(4)Math.random():获取0-1内的伪随机数,包括0但是不包括1;
(5)Math.max(x1,x2,x3,...):返回最大值,其中参数必须得是number格式;
(6)Math.min(x1,x2,x3,...);返回最小值,其中参数必须得是number格式;
(7)Math.round(x):返回四舍五入后的整数;
(8)Math.trunc(x):返回一个数的整数部分;
 // 获取min-max范围内的一个随机整数
 function setRandom(min, max){
    return Math.floor(Math.random()*(max - min) + min)
 }

11.安全随机数扩展方法 window.crypto

var array = new Uint32Array(10);
window.crypto.getRandomValues(array);

12.箭头函数有几个使用注意点。

1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。

(2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。

(3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用Rest参数代替。

(4)不可以使用yield命令,因此箭头函数不能用作Generator函数。

13.什么是尾调用,尾调用优化,尾递归

概念:指某个函数的最后一步是调用另一个函数。
function f(x){
  return g(x);
}

尾调用不一定出现在函数尾部,只要是最后一步操作即可。
function f(x) {
  if (x > 0) {
    return m(x)
  }
  return n(x);
}

尾调用优化:函数的调用存在‘调用帧’,多个函数嵌套的情况会造成多个‘调用帧’存在,尾调用优化可以使只存在一个‘调用帧’,进而可以节省内存;

尾递归:函数调用自身,称为递归。如果尾调用自身,就称为尾递归。
递归非常耗费内存,因为需要同时保存成千上百个调用帧,很容易发生“栈溢出”错误(stack overflow)。但对于尾递归来说,由于只存在一个调用帧,所以永远不会发生“栈溢出”错误。

14.i++和++i的区别

一句话说明:当两者没有处于副作用时,效果一样; 当两者处于副作用时,i++会先执行副作用,再进行递增,++i会先进行递增,再执行副作用。