共计 1074 个字符,预计需要花费 3 分钟才能阅读完成。
前端面试题精选
1.memorize 函数实现应用
首先什么是 memorize 函数,memorize 直译:记忆,缓存等意思,到了计算机层面就翻译为缓存函数,缓存函数就是把计算的结果,存在函数中,当再次调用的时候就可以直接调用。这种方法就是用空间来换取时间
const memorize = function(fn) {const cache = {}
return function(...args) { // 参数值,是一个数组,数组的值是需要计算的值
const _args = JSON.stringify(args)
return cache[_args] || (cache[_args] = fn.apply(fn, args))
// 缓存函数的核心判断依据,传入的键名对应的键值为 null 则调用 add 方法 反之从 cache 中拿取
}
}
const add = function(a) {return a + 1}
const adder = memorize(add) // memorize 只调用一次 后面 adder 调用的都是 return 的函数
adder(1) // 2 cache: {'[1]': 2 }
adder(1) // 2 cache: {'[1]': 2 }
adder(2) // 3 cache: {'[1]': 2, '[2]': 3 }
2. bind,apply,call 的区别和实现
javascript 权威指南上的解释是:call()、apply()可以看做是某个对象的方法,通过调用方法的形式来间接调用函数。bind()就是将某个函数绑定到某个对象上。
var obj = {x:1}
function foo() {console.log(this.x)
}
foo.call(obj) //1
call()和 apply()的第一个参数相同,就是指定对象,他们的根本区别就在于传入的参数。
call 传入参数形式为 call(obj, 1, 2, 3)
apply 传入参数形式为 apply(obj, [1,2,3])
bind()方法和前两者不同在于:bind()方法会返回执行上下文被改变的函数,而不会立即执行 ,而前两者是 直接执行该函数 。他的参数和 call() 相同.
3. 数组去重
去重方法有很多种,常用必需会写的几种去重方法有
1. 遍历去重
2. json 键名不唯一去重
3. new Set()去重
3.1 遍历去重
let arr = [1, 2, 3, 4, 5, 6, 7, 7, 7, 3, 111, 1, 3]
for (let i = 0; i < arr.length; i++) {for (let j = i + 1; j < arr.length; j++) {if (arr[i] == arr[j]) {arr.splice(j, 1)
i = i - 1
}
}
}
正文完
发表至: javascript
2019-05-15