var 和 let const 的区别

这一篇由 01下班后一小时| 《JavaScript 悟道》 读书笔记_艾米栗写代码的博客-CSDN博客引申而来。

1、一个例子

我在理解 this 动态绑定时,尝试了一个例子:

var obj = {
  foo: function () {
    console.log(this.bar) 
  },
  bar: 1
};
var foo1 = obj.foo;
var bar = 2;
obj.foo() // 1
foo1() // 2

这个例子想表达的是 this 是在运行时的时候指定的,指向调用函数的对象。

foo1 函数虽然是对象 obj 下的一个属性,但执行 foo1 函数的是 全局对象 window,所以,this 指向全局对象,也就是打印 2。

而执行obj 对象下的 foo 函数,则会打印 1,因为执行 foo 函数的对象是 obj, 所以,this 就会指向 obj 对象。

那么,问题来了

// 在我将全局的属性
var bar = 2;
// 改为
const bar = 2;
// 或者 
let bar = 2;

再次调用 foo1 函数 竟然打印为 undefined。

原因是:let/const 定义的变量不会挂载到window对象上,所以在 window 对象上,无法找到 bar 属性。

2、var 和 let、const 都有哪些区别?

1、不存在变量的提升

2、暂时性死区

3、不可重复声明

4、let、const声明的变量不会被挂载到window下

5、块级作用域

3、let 和 const 有哪些区别?

1、无论是非严格模式下还是严格模式下,都不可以为const声明的常量再赋值。常量,顾名思义,不变的值。

2、const声明时必须进行初始化赋值。

碎碎念,这是一个基础面试题,之前也有背过,但果然,只有遇到问题的时候才会印象更加深刻。

猜你喜欢

转载自blog.csdn.net/qq_34539486/article/details/127213994