前端面试js小总结(一)

js面试题及分析
1.var fn=function a(){
        alert(a);
    };
    fn();//function a(){alert(a);}
    alert(a);//a is not defined;
**************
考的是函数表达式和函数声明的区别,表达式不会提前,只会在赋值时候声明,由赋值符左操作数调用执行。**************
2.var a=1;
    function fn(){
        a=b=2;
    }
    fn();
    alert(a);//2
    alert(b);//2
**************
a还好就是函数内直接改变全局变量的值,主要是b, 如果严格模式会出错,否则就是相当于没有var的声明的b直接定义,为全局变量。
**************
3.function a(){
        console.log("function a");
    }
    var a;
    console.log(a);//function a(){ console.log("function a"); }
**************
变量声明提前,var a;提到最前面,然后声明了函数a,所以就是输出该函数。
**************
4.function test(){
        var a=1;
        setTimeout(function(){
            alert(a);
            a=3;
        },0);
        a=2;
        setTimeout(function(){
            alert(a);
            a=4;
        },3000);
    }
    test();
    alert(0);
**************
结果是:0 ,2, 3
当调用test的时候里面的alert都是在时间间隔内部,所以会先放到一个时间间隔的队列,之后会接在js执行队列的末尾,所以js正常执行顺序的程序先执行。如果test内部有js的顺序执行的内容也会按顺序先执行。
**************
5.var a=1;
    obj={b:2};
    function fn(){}
    fn.c=3;
    function change(x,y,z){
        x=4;
        y.b=5;
        z.c=6;
        return z;
    }
    change(a,obj,fn);
    console.log(a+obj.b+fn.c);//12
**************
change函数的三个参数x,y, z 分别对应的是a  ,obj ,fn, a是基本数据类型,所以x相当于1传入,基本类型不会改变,obj和fn都是引用类型,所以传入的是引用,则对其属性改变,引用就会改变,所以就是1+5+6=12的结果。
**************
6.js判断对象类型的方法和优缺点
**typeof   不能细分出具体是什么object,基本类型可以。
**instanceof  必须实例才可以判断,基本类型不可以。
**Object.prototype.toString.call();可以较详细的判断出来,null和undefined分不出来(Null),NaN和Number分不出来(Number),[object,Number/Boolean/String/Object/Array/Function/Date/Null ]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值