如何实现垂直水平居中
BFC
包含块
优化问题
内存泄漏问题
清除浮动
模块化
promise相关代码
盒模型
媒体查询
js设计模式
node.js
saa/less
数组去重(set)
function unique5(arr){ var x = new Set(arr); return [...x];}复制代码
数组降维
二维数组降维(需要注意的是如果数组的元素还是数组则不会再展开了,也就是concat方法只能降低一维)function flatten2d(arr) {var result = [];for(var i = 0; i < arr.length; i++) {result = result.concat(arr[i]);}return result;}复制代码
多维数组降维var arr = [2, 3, [2, 2], [3, 'f', ['w', 3]], { "name": 'Tom' }];function deepFlatten(arr) { var res = []; if (Array.isArray(arr)) { arr.forEach((item) => { res = res.concat(deepFlatten(item)); }); } else { res = res.concat(arr); } return res;}console.log(deepFlatten(arr));// [2, 3, 2, 2, 3, "f", "w", 3, {name: "Tom"}]复制代码
new操作符具体干了什么
1.先创建了一个新的空对象2.然后让这个空对象的__proto__指向函数的原型prototype3.将对象作为函数的this传进去,如果return 出来东西是对象的话就直接返回 return 的内容,没有的话就返回创建的这个对象复制代码
const o = new Object();//创建了一个新的空对象oo.__proto__ = Foo.prototype;//让这个o对象的` __proto__`指向函数的原型`prototype`Foo.call(o);//this指向o对象a = o;//将o对象赋给a对象复制代码
函数声明和函数表达式的区别
// 函数声明 // function fn() {} // fn(); //1 函数声明必须有函数名 //2 函数可以在任意地方调用fn(); // 函数表达式 // 1 前后两个函数的名字可以相同也可以不相同 // 2 function 后面的这个名字是可以省略的 // 3 function 后面的这个名字只能再函数内部使用 // 4 函数调用只有在函数表达式声明后调用。 // var fn = function fn () {};如果是使用的函数表达式,那么函数调用就不能在表达式之前,如果是函数声明,由于在全局执行上下文的执行创建阶段时,函数声明会提升到上面,所以是可以在函数声明之前调用函数的。复制代码
函数声明提升和变量提升
函数柯里化
购物车实现
事件委托