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.