面经练习(六)
1.type of null 为什么是 object
2.函数柯里化
在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。
易于测试是哪个参数环节出现了问题
3.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;
}
}
}