美文网首页
综合考察闭包,this指针的代码题

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

作者: haha2333 | 来源:发表于2019-07-22 23:33 被阅读0次

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

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

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

    相关文章

      网友评论

          本文标题:综合考察闭包,this指针的代码题

          本文链接:https://www.haomeiwen.com/subject/ytqelctx.html