记录第一次面试——广州凡科(四)
第四题:让人纠结的代码题
具体题目已经记得不是很清楚了
考察点:闭包和this指针,还有点点匿名函数?
var a = "凡科足球俱乐部"
var xxx = {
a:"更强的足球俱乐部",
bb:function() {
return function (a){
return function(){
console.log(this.a); // 凡科足球俱乐部
console.log(a); // 更强的足球俱乐部
}();
}(this.a)
}
}
console.log(xxx.bb()) // undefined
var a = "凡科足球俱乐部"
var xxx = {
a:"更强的足球俱乐部",
bb:function() {
return function (a){
return function(){
console.log(this.a); // 凡科足球俱乐部
console.log(a); // 凡科足球俱乐部
}();
}(this.a)
}
}
var exec=xxx.bb
exec()
真是没有想到,竟然不一样!!!
引出了几个问题:
1.this指针在这里究竟是怎么指向的
答:第一块代码由bb由xxx对象引用,所以this指向xxx,所以第10行,this.a是"更强的足球俱乐部",也作为参数传进了匿名函数内部。所以第2个console是"更强的足球俱乐部",在闭包内部,this始终指向全局环境,所以第1个console打印"凡科足球俱乐部"。
第二块代码,exe获得了bb的引用,实际上他是在全局环境下执行的,所以this.a是 "凡科足球俱乐部"
2.第一块代码的undefined是从哪里来的?
答:因为bb()执行后打印两条console,但是bb()没有返回值,所以输出undefined
3.用vscode编译和用浏览器编译结果不一样
答:vs code模仿js引擎可能不完美,毕竟js代码编译是浏览器工作。但是使用浏览开发者工具进行调试时,注意浏览器缓存
网友评论