这一篇由 01下班后一小时| 《JavaScript 悟道》 读书笔记_艾米栗写代码的博客-优快云博客引申而来。
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声明时必须进行初始化赋值。
碎碎念,这是一个基础面试题,之前也有背过,但果然,只有遇到问题的时候才会印象更加深刻。