wkiwi的博客

web前端经典笔试题

发布时间:4年前热度: 1205 ℃评论数:

1. 以下代码输出什么结果?

alert(a)
a()
var a = 3
function a(){
    alert(10)
}
a()
a = 6 
alert(a)
a()

分析:这道题考察声明提前,将上述代码转为实际代码

var a    //声明提前

function a (){ //声明提前 alert(10)

}

alert(a) //输出a函数 a() //输出10 a = 3 //a赋值为3

a() //报错此时a值为3已不是函数,后续不再执行

a=6

alert(a) a()


2. 以下代码输出什么结果?

for(var i =0;i<5;i++){
setTimeout(()=>{
    console.log(new Date(),i)
},1000)
}
console.log(new Date(),i)

分析:这道题考察宏任务相关知识,js为单线程,遇到 包括整体代码 script,setTimeout,setIntervcal等会创建宏任务,待主线程/与微任务(Promise,process.nextTick)完成后再去处理宏任务,将上述代码转换为实际代码

for(var i =0;i<5;i++){
}
setTimeout(()=>{
console.log(new Date(),i)
console.log(new Date(),i)
console.log(new Date(),i)
console.log(new Date(),i)
},1000)
console.log(new Date(),i)

//当前时间,5 
//当前时间+1秒,5  
//当前时间+1秒,5 
//当前时间+1秒,5 
//当前时间+1秒,5 

3.   以下代码输出什么结果?  

    考察引用数据类型细节

var a = new Object();
a.value = 1;
b = a; //b.value=1
b.value = 2;//b.value=2;a.value=2,因为a和b指向同一块引用类型的值
alert(a.value);   

4.以下代码输出什么结果?  


var foo = 1;
function f(){
    console.log(foo);
    var foo = 2;
    console.log(foo);
}
f();

分析: 考察 变量作用域 与变量声明提升转换为下述代码

var foo = 1;
function f(){
    var foo //声明提前   有局部变量就不去使用外部的foo=1 就近原则
    console.log(foo);  //undefined
    foo = 2;
    console.log(foo);  //2
}
f();

5.函数重载

const Event = {}
const addMethod = (object,name,fn)=>{
    const old = object[name]
    object[name] = function (...args){
        if(args.length == fn.length){
            return fn.apply(this,args)
        }else{
            return old.apply(this,args)
        }
    }
}
addMethod(Event,'add',(a,b)=>a+b)
addMethod(Event,'add',(a,b,c)=>a+b+c)
addMethod(Event,'add',(a,b,c,d)=>a+b+c+d)
Event.add(1,2) //3
Event.add(1,2,3) //6
Event.add(1,2,3,4) //10

6.函数柯里化

const sumFuc = (fn,...arg)=>{ return (...ar)=>{ const args = [...arg,...ar] if(args.length<fn.length){ return sumFuc(fn,args) }else{ return fn(args) } } }

const sum = (a,b,c,d)=>a+b+c+d

sumFuc(sum)(1)(2)(3)(4) //10 sumFuc(sum)(1,2)(3)(4) //10 sumFuc(sum)(1,2,3)(4) //10

sumFuc(sum)(1)(2)(3)(4) //10 sumFuc(sum)(1,2)(3)(4) //10 sumFuc(sum)(1,2,3)(4) //10

web前端笔试题,面试,经典笔试题

手机扫码访问