综合考察闭包,this指针的代码题

2019-07-22  本文已影响0人  haha2333

记录第一次面试——广州凡科(四)

第四题:让人纠结的代码题
具体题目已经记得不是很清楚了

考察点:闭包和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代码编译是浏览器工作。但是使用浏览开发者工具进行调试时,注意浏览器缓存

上一篇 下一篇

猜你喜欢

热点阅读