面经练习(六)

面经练习(六)

  • 1.type of null 为什么是 object
  • 2.函数柯里化
  • 3.js面试题Foo.getName()的故事
  • 4. function和object原型输出题
  • 5.最长公共子字符串
  • 6. addEventListener有关绑定丢失的问题
  • 7.background-size: contain 与cover的区别
  • 8.构造函数原型链问题
  • 9.也是与构造函数返回值有关
  • 10.事件循环相关编程题

1.type of null 为什么是 object

面经练习(六)_第1张图片

2.函数柯里化

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

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

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

4. function和object原型输出题

面经练习(六)_第3张图片
输出 无法执行、2、1

这道题解释

5.最长公共子字符串

面经练习(六)_第4张图片

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的区别

面经练习(六)_第5张图片
在这里插入图片描述

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.事件循环相关编程题

面经练习(六)_第6张图片
主要利用了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;
    }
  }
}

你可能感兴趣的:(秋招面经汇总)