祝大佬能顺利通过面试。
我是来学***佬的面试题的......
3.设计一个函数,能实现构造函数创建对象
思路:模拟new的具体过程
function createObj(parent,...args){
if(typeof parent !== 'function')
throw new TypeError('constructor is not a function.');
var obj = Object.create(parent.prototype);
parent.apply(obj, args);
return obj;
}
4.设计一个栈,不使用数组。
思路:链表实现,push、pop时间复杂度为O(1).
function Stack(){
var Node = function(val,next){
this.val = val;
this.next = next || null;
}
// 创建虚拟头结点
var dummyHead = new Node(-1);
var size = 0;
this.push = function(val){
var node = new Node(val, dummyHead.next);
dummyHead.next = node;
size++;
}
this.pop = function(){
if(!dummyHead.next)
return undefined;
var node = dummyHead.next;
var val = node.val;
dummyHead.next = node.next;
size--;
return val;
}
this.getSize = function(){
return size;
}
this.isEmpty = function(){
return size === 0;
}
}
16.防抖操作
思路:防抖就将多次操作融合为一次操作
可以先延时,后执行(immediate=false)
也可以立即执行,然后延时(immediate=true)
function debounce(func, wait, immediate){
let context,args,timer;
let later = function(){
return setTimeout(() => {
timer = null;
if(!immediate){
func.apply(context, args);
}
}, wait);
}
return function(...params){
if(!timer){
timer = later();
if(immediate){ // 需要被立即执行
func.apply(this,params);
}else{
context = this;
args = params;
}
}else{
clearTimeout(timer);
timer = later();
}
}
}
归并排序,有点复杂好像,不太会。
ajax和fetch的区别,啥来着。。。