饥人谷每天一到面试题 - yulilong/resume GitHub Wiki
第一天:写一个execTime函数
写一个execTime函数,参数:时间毫秒数,作用:什么都不做,但执行函数会消耗时间(参数传入的时间)
function execTime(t) {
// 补全代码
}
console.log(1) // 输出1
execTime(3000) // 运行3秒钟
console.log(2) // 3秒后输出2
// 答案
function execTime(t) {
var seconds = (new Date()).getTime() + t;
while ((new Date()).getTime() != seconds){}
}
第二天:写一个函数
写一个execTime函数,参数t:时间毫秒数,参数callback:回调函数
function execTime(t, callback) {
// 补全代码
}
console.log(1)
execTime(3000, function(){
console.log(3)
})
console.log(2)
// 上面代码执行结果为:立即输出1和2,3秒手输出3
//答案
function execTime(t, callback) {
setTimeout(callback, 3000)
}
第三天:写一个对象obj
写一个对象obj,使得obj.obj.obj === obj
也就是说,不管出现多少次.obj
,都得到obj
var obj = {}
obj.obj = obj;
obj.obj === obj // true
obj.obj.obj.obj.obj.obj === obj // true
第四天:写一个函数fn
写一个函数fn,使得fn满足一下条件:
fn() === fn
fn.fn === fn
// 答案
function fn() {
this.fn = this;
return fn;
}
第五天: 写一个函数fn
写一个函数fn,使得fn满足一下条件:
fn()
打印出a
fn()()
打印出b
fn()()()
打印出c
function fn() {
var timer = setTimeout(() => { console.log('a') })
return () => {
if (timer) { clearTimeout(timer) }
timer = setTimeout(() => { console.log('b') })
return () => {
if (timer) { clearTimeout(timer) }
timer = setTimeout(() => { console.log('b') })
}
}
}
/*setTimeout最小调用事件会被函数潜逃层数影响,所以不写delay也没关系
*/
function fn() {
var chr = 'a';
setTimeout(function() { console.log(chr) })
return function() {
chr = 'b';
return function() {
chr = 'c';
}
}
}
fn()
fn()()
fn()()()
第六天:写一个函数fn
写一个函数fn,使得fn满足一下条件:
-
fn()
== 'a' -
fn()()
== 'b' -
fn()()()
== 'c'
function fn() {
var b = function() { return 'c'}
b.valueOf = function() { return 'b'}
var a = function() { return b }
a.valueOf = function() { return 'a'}
return a;
}
fn() == 'a'
fn()() == 'b'
fn()()() == 'c'