网址记录
面试没有答案网址
https://juejin.cn/post/7160887322416775199
TS 中接口 interface 与 type 区别?
差异点: ( 前两条能说出来就好 )
1.定义类型范围
interface只能定义对象类型, 而type声明可以声明任何类型,包括基础类型、联合类型或交叉类型。
2.扩展性
接口可以extends、implements,从而扩展多个接口或类。类型没有扩展功能
3.合并声明
定义两个相同名称的接口会合并声明。
4.typeof
type可以使用typeof获取实例类型定义两个同名的type会出现异常。
参考网址:
https://www.cnblogs.com/cuijinlin/p/16036101.html
数组拉平的几种方?
用递归来解决,大概就是for循环遍历,如果是数组继续调用方法本身,不是就push到新数组
es2019 新特性之一 flat(Infinity) 也可以解决问题
参考网址
https://blog.csdn.net/anaction/article/details/93893384
代码如下:
const arr = [1, 2, 3, 4, [1, 2, 3, [1, 2, 3, [1, 2, 3]]], 5, ["string", { type: "对象" }]];
const flat = (arr) => {
let arrResult = []
for(let i=0, len=arr.length; i<len; i++){
if(Array.isArray(arr[i])){
arrResult.push(...flat(arr[i]))
// arrResult = arrResult.concat(flat(arr[i]))
}else{
arrResult.push(arr[i])
}
}
return arrResult;
}
flat(arr)
// [1, 2, 3, 4, 1, 2, 3, 1, 2, 3, 1, 2, 3, 5, "string", { type: "对象" }]
js 闭包
大概解释:父函数包含子函数,子函数用到了父函数变量。该变量处在被引用状态,处在内存中不会被释放
参考网址:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures
function init() {
var name = "Mozilla"; // name 是一个被 init 创建的局部变量
function displayName() { // displayName() 是内部函数,一个闭包
alert(name); // 使用了父函数中声明的变量
}
displayName();
}
init();