console.log("var 声明前:", lessonType); var lessonType = "JavaScript"; // 如果你取消下面两行注释,会报错,因为 let 在声明前不能访问。 // console.log("let 声明前:", chapterType); // let chapterType = "作用域"; function compareScope() { if (true) { var lessonName = "变量"; let chapterName = "作用域"; const stage = "进阶"; console.log("块内:", lessonName, chapterName, stage); } var lessonName = "变量"; let chapterName = "作用域"; const stage = "进阶"; console.log("块内:", lessonName); // 任务: // 1. 输出 lessonName // 2. 不要直接在这里输出 chapterName,否则会报错 // 3. 用一句注释说明为什么 } compareScope(); // 任务: // 4. 试着重新给 const 声明的值赋值 // 5. 观察会发生什么 /*观察 `var` 声明前为什么能访问到 `undefined` - 用 `var` 声明一个函数内部变量 - 用 `let` 声明一个代码块内部变量 - 在可访问的位置输出它们 - 观察为什么 `var` 在块外还能访问,而 `let` 不行 - 再写一段代码证明 `const` 不能被重新赋值*/