前端面试题-js作用域的理解

文章目录

    • 知识点
    • 面试题
    • 推论及注意事项

知识点

1 全局作用域和函数作用域(es6引入了块级作用域{})
2 在全局作用域中会进行预编译,创建GO对象,在函数内部创建AO对象;
有关作用域及作用域链的问题,我认为是前端必须掌握的,这里推荐下一个博客,写的不错;
https://www.cnblogs.com/jinfeixiang/p/10055113.html

面试题

var a =12;
    function fn(){
     
        console.log(a);
        var a=45;
        console.log(a);
    }
    console.log(fn)
    /**
     *  过程讲解
     *  GO{
     
     *  a : undefied -> 12
     *  fn: function()
     *  }
     * 
     *  AO{
     
     *  a : undefiend --> 45 
     *  }
     */
   var obj = {
     
        val:2,
        dbl:function(){
     
            var val = 45;
            console.log(this);
            this.val*=2;
            console.log(val);
            console.log(this.val);
        }
    }
    var ff = obj.dbl();
    var fn=obj.dbl;
    fn();
    /**
     *  过程讲解:360经典面试题,考察作用域和this指向问题
     *  1 创建了一个对象obj,ff,fn
     *  利用GO对象分析
     *  GO{
     
     *  obj:{
     }
     *  ff :function(){
     }
     *  fn :function(){
     }
     *  }
     *  可以看出,考察this指向更多一些
     *  (1) var ff = obj.dbl(),函数谁调用,this指向谁,obj.dbl() == obj.dbl.call(obj),所以this指向obj
     *   输出 obj,45,4
     *   (2) var fn = obj.dbl,fn(),相当于this指向fn,也就是window;
     *   输出 window,45,undefiend
     */

推论及注意事项

没什么要注意的

你可能感兴趣的:(前端面试题)