【JavaScript面试大全之易错面试题】

1.有误导性的题目
for(var i=0;i<3;++i){   //如果把var换成let那么输出0,1,2
     setTimeout(function(){
         console.log(i);//3,3,3
     },100);
    }
    
for(var i=0;i<3;++i){
    setTimeout(console.log(i),100);//0,1,2
}
2.js的五种基本数据类型
	undefined、string、null、number、boolean
3.javascript中的全局函数有:
1、decodeURI();
2、decodeURIComponent();
3、encodeURI();
4、encodeURIComponent();
5、escape();
6、eval()。
4.
let A=function(){}
A.prototype.a=1
let B=new A();
A.prototype={
    b:2,
    c:3
}
let C=new A();
A.prototype.d=4;
console.log(B.a)//1
console.log(B.b)//undefined
console.log(C.c)//3
console.log(C.d)//4

如果把:
A.prototype={
    b:2,
    c:3
}改为
A.prototype.b=2;
A.prototype.c=3;
那么:console.log(B.b)  //输出2
5.(function a(){
     a=20;
    console.log(a)  //输出f a(){}
})();
6.var A={n:4399};
var B=function(){this.n=9999};
var C=function(){var n=8888};
B.prototype=A;
C.prototype=A;
var b=new B()
var c=new C()
A.n++
console.log(b.n) //9999
console.log(c.n) //4400
解析:console.log(b.n)在查找b.n是首先查找b对象自身有没有n属性,如果没有会去原型(prototype)上查找,
当执行var b=new B()时,函数内部this.n=9999(此时this指向b)返回b对象,b对象有自身的n属性,所以console.log(c.n)返回9999。
同理 当执行var c=new C()时,c对象没有自身的n属性,向上查找,找到原型(prototype)上的n属性,因为A.n++(此时对象A中的n为4400),所以返回4400.
7.let a='w'
let obj={
    a:'o',
    print:function(){
        console.log(this.a);
    },
}
let p=obj.print;
obj.print(); //o
p();//undefined
解析:考查let和var定义变量的区别以及不同方式调用函数时this的指向问题。
定义新的访问变量this指向这个变量,所以在函数内部寻找变量 发现是o 而直接访问函数this指向window发现只有一个let定义的变量a
它不会挂载到window下,所以是undefined
8.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值