前端面试题

一、二叉树相关题目

二、超出数组长度一半的数组元素

在这里插入图片描述

function MoreThanHalfNum_Solution(numbers){
   let out = 0;
   let obj = {};
   let length = numbers.length / 2;
   numbers.forEach(item => {
     !obj[item] ? obj[item] = 1 : obj[item]++
   });
   for(let [key, value] of Object.entries(obj)) {
    if(value > length ) {
       out = key;
    }
   }
   return out;
}

三、斐波那契、跳台阶

在这里插入图片描述
在这里插入图片描述
function Fibonacci(n){
if(n0||n1) {
return n;
}
let a=0,b=1,c;
for(let i=2;i<=n;i++){
c = a+b;
a = b;
b = c;
}
return c;
}

在这里插入图片描述
https://www.cnblogs.com/evenleee/p/8474465.html
在这里插入图片描述
在这里插入图片描述
四、 js 模拟call、apply、bind实现

https://www.cnblogs.com/mengfangui/p/10502962.html

1、 js 模拟call

//f.call(o)其原理就是先通过 o.m = f 将 f作为o的某个临时属性m存储,然后执行m,执行完毕后将m属性删除。

// o.m=f;

// o.m();

// delete o.m;

Function.prototype.myCall = function (context) {
  var context = context || window
  // 给 context 添加一个属性
  context.fn = this
  // 将 context 后面的参数取出来
  var args = [...arguments].slice(1)
  var result = context.fn(...args)
  // 删除 fn
  delete context.fn
  return result
}

2、js模拟apply

Function.prototype.myApply = function (context) {
  var context = context || window
  context.fn = this
  var result
  // 需要判断是否存储第二个参数
  // 如果存在,就将第二个参数展开
  if (arguments[1]) {
    result = context.fn(...arguments[1])
  } else {
    result = context.fn()
  }
  delete context.fn
  return result
}

3、js模拟bind

模拟bind函数:

var sun={
  name:&#
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值