当前位置: 首页 > Web前端 > HTML

前端面试题每天3题——2022-09-02

时间:2023-03-28 19:26:15 HTML

每日3题10下面代码执行后,控制台输出什么?varobj={a:1,};((obj)=>{console.log(obj.a);obj.a=3;varobj={a:2,};console.log(obj.a);})(obj);console.log(obj.a);11下面代码执行后,控制台输出什么?functionFun(){}Fun.prototype.a=1;letf1=newFun();Fun.prototype={b:2,c:3,};letf2=newFun();Fun.prototype.d=4;console.log(f1.a);console.log(f1.b);console.log(f2.c);console.log(f2.d);12下面代码执行后,输出内容在控制台中?varnum=1;letobj={num:2,foo:function(){console.log(this.num);},foo2:()=>{console.log(this.num);},};让f1=obj.foo;让f2=obj.foo2;obj.foo();obj.foo2();f1();f2();答案与分析10//答案123//考察形参、局部变量、引用类型、立即执行函数//在立即执行函数内部,var声明的变量会被提升到函数的顶部varobj={a:1,};((obj)=>{varobj;//重复声明无效console.log(obj.a);//*1obj.a=3;//*2obj={a:2,};//*3console.log(obj.a);//*4})(obj);console.log(obj.a);//*5/***形参obj为局部变量,在函数中重复声明varobj无效*立即执行函数并将全局对象obj作为参数传入函数,注意是引用类型,*所以函数中的obj指向全局对象obj,所以在`*1`处输出1(即全局变量的属性1)***2将全局变量的属性a赋值给3**3局部变量obj指向一个新的对象`{a:2}`,注意不会影响全局变量**4是局部变量的属性a,即新对象的属性a`{a:2}`,也就是2**5处的全局变量的输出属性a在函数中已经改为3*/11//答案:1undefined34//检查原型链函数Fun(){}Fun.prototype.a=1;//给Fun的原型对象添加属性a并赋值给1letf1=newFun();//创建一个实例f1,此时f1的属性__proto__指向Fun.prototypeFun.prototype={b:2,c:3,};//Fun的prototype属性指向一个新的对象//注意不会影响实例f1,因为f1.__proto__还是指向原来的原型对象letf2=newFun();//创建实例f2,和f2的属性__proto__指向Fun.prototype//注意Fun.prototype与创建f1时创建的不同//即f2.__proto__指向{b:2,c:3}Fun.prototype.d=4;//为Fun的原型对象添加属性d并赋值为4//此时Fun的原型对象变为{b:2,c:3,d:4}//注意这是对象Fun.prototype指向//此时f2.__proto__也指向{b:2,c:3,d:4}//总结:f1.__proto__is{a:1}//f2.__proto__是{b:2,c:3,d:4}console.log(f1.a);//1console.log(f1.b);//未定义,它本身和原型对象都没有属性bconsole.log(f2.c);//3console.log(f2.d);//412//答案在浏览器中2111//探索这个,箭头函数和与普通函数的区别varnum=1;//在浏览器中,var声明的全局变量会挂载到window对象上letobj={num:2,foo:function(){console.log(this.num);},//普通函数的this只有在执行时才能确定foo2:()=>{console.log(this===global);console.log(this.num);},//箭头函数的this是在定义时确定的//箭头函数内部的this是定义时外部代码块的this//注意这里的外部代码块是全局作用域,也就是this指向全局作用域thisiswindow//{}obj之后不是代码块!//所以箭头函数中的this.num就是全局num为1};letf1=obj.foo;letf2=obj.foo2;obj.foo();//调用位置有执行上下文对象为obj,所以this指向obj并输出2obj.foo2();//箭头函数输出1f1();//调用位置的执行上下文对象是全局对象,所以输出的globalnum为1f2();//箭头函数输出1