Page 184 - JavaScript
P. 184
ClassDeclaration's Name is bound in different ways in different scopes -
1. The scope in which the class is defined - let binding
2. The scope of the class itself - within { and } in class {} - const binding
class Foo {
// Foo inside this block is a const binding
}
// Foo here is a let binding
For example,
class A {
foo() {
A = null; // will throw at runtime as A inside the class is a `const` binding
}
}
A = null; // will NOT throw as A here is a `let` binding
This is not the same for a Function -
function A() {
A = null; // works
}
A.prototype.foo = function foo() {
A = null; // works
}
A = null; // works
Read Classes online: https://riptutorial.com/javascript/topic/197/classes
https://riptutorial.com/ 141

