前端面试题-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
     */

推论及注意事项

没什么要注意的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李卓书

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值