面经练习(六)

1.type of null 为什么是 object

在这里插入图片描述

2.函数柯里化

在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。
在这里插入图片描述
易于测试是哪个参数环节出现了问题

3.js面试题Foo.getName()的故事

js面试题Foo.getName()的故事

4. function和object原型输出题

在这里插入图片描述
输出 无法执行、2、1

这道题解释

5.最长公共子字符串

在这里插入图片描述

var longestCommonPrefix = function(strs) {
  let str = strs[0]
  if(!str) return ''
  let res = ''
  for(let i = 0; i < str.length; i++){
    let flag = strs.every(item => item[i] == str[i])
    if (flag) {
      res += str[i]
    }else {
      return res
    }
  }
  return res
};

6. addEventListener有关绑定丢失的问题

function A() {
    this.n = 0;
}
A.prototype.callMe = function() {
    console.log(this.n);

}
let a = new A();

document.addEventListener('click', a.callMe);

document.addEventListener('click', () => {
    a.callMe();
});
document.addEventListener('click', function() {
    a.callMe()
})

undefined 0 0

7.background-size: contain 与cover的区别

在这里插入图片描述
在这里插入图片描述

8.构造函数原型链问题

function G() {

}

function F() {
    return new G()
}

a = new F();
console.log(a);


console.log(a instanceof F);//false

关于构造函数:

一般构造函数不显式返回值,用户可以选择主动返回对象来覆盖正常的对象创建步骤
如果构造函数没有返回值:默认情况下 return this; 即返回创建的实例
如果返回简单数据类型:返回该实例
如果返回对象类型:返回这个对象类型,而不是实例

9.也是与构造函数返回值有关

function A() {
    this.a = 1
    return {
        a: 2
    }
}
A.prototype.a = 3
const a = new A()

console.log(a.a)//a等于 A函数返回的对象{a:2}
console.log(a.constructor)//Object
console.log(a.__proto__)//Object.prototype

10.事件循环相关编程题

在这里插入图片描述
主要利用了promise函数只能改变一次状态的特性

//简单版
function debounce(fn) {
  let isExecuted = false;
  return function () {
    if (!isExecuted) {
      isExecuted = true;
      new Promise((resolve, reject) => {
        fn();
        resolve();
      }).then(() => {
        isExecuted = false;
      })
    }
  }
}
//考虑fn带参数及fn可能有返回值情况
function debounce(fn) {
  let isExecuted = false;
  return function (...args) {
    if (!isExecuted) {
      isExecuted = true;
      let res;
      new Promise((resolve, reject) => {
        res = fn.apply(null, args);
        resolve();
      }).then(() => {
        isExecuted = false;
      })
      return res;
    }
  }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值