我们都知道,var 是有变量提升这个机制的,const 不可被改变,强行重新赋值会报错,但是,这两个类型还有一个区别,var 会被挂载到 window 上,而 const 不会。

比如说,下面这个例子,这个例子出现在猿辅导面试二面中,同时考察普通函数,箭头函数的 this 指向,以及 const var 的区别。

        var b = '456';
        const a = '123';
        obj={
            a:'456',
            f1:function(){
                console.log(this.a)
            },
            f2:()=>{
                console.log(this.a)
            }
        }
        obj.f1();
        obj.f2();
        console.log(window)

这篇文章重点不讲 this 指向,而是讲 const 和 var 会不会被挂载到 window 上。比如说,上面这段代码的输出结果为 456 undefined 以及 windows 对象。同时,我们可以发现 b 是 windows 的一个属性,而 a 不是。

![](v2-fbb317492aa20f1b8676308803aeff37_r.jpg)
![](v2-56430d4d0380396b635b4e28d4ee8861_720w.jpg)

我们改动 const a 变成 var a, 那么这个时候,可以看到,a 也是 window 的一个属性。

        var b = '456';
        var a = '123';
        obj={
            a:'456',
            f1:function(){
                console.log(this.a)
            },
            f2:()=>{
                console.log(this.a)
            }
        }
        obj.f1();
        obj.f2();
        console.log(window)
![](v2-a763a79e46b8417903e68953cde98f67_r.jpg)

转载至知乎,原文链接:https://zhuanlan.zhihu.com/p/305253801