严格模式下JavaScript要求变量必须显式声明(let/const/var),禁止隐式创建全局变量,未声明赋值会抛ReferenceError;let/const为块级作用域且不可重复声明,const值不可重赋;函数内也须声明变量;通过"use strict"启用。

在严格模式下,JavaScript 对变量声明的要求更严格,未声明就直接赋值会抛出 ReferenceError。关键是要始终用 let、const 或(不推荐但兼容的)var 显式声明变量。
必须先声明再使用
严格模式禁止隐式创建全局变量。以下写法会报错:
name = "Alice"; // ❌ Uncaught ReferenceError: name is not defined
正确做法是明确声明:
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
const name = "Alice";(推荐,值不变时) -
let age = 25;(推荐,值可能重新赋值) -
var message = "Hello";(可用但不推荐,存在变量提升和作用域问题)
注意块级作用域与重复声明
let 和 const 是块级作用域,且在同一作用域内不允许重复声明:
-
let count = 1; let count = 2;→ ❌ SyntaxError -
const PI = 3.14; PI = 3.1415;→ ❌ TypeError(不可重新赋值) - 但在不同块中可以同名声明:
{ let x = 1; } { let x = 2; }✅
函数内部也要遵守规则
即使在函数里,也不能跳过声明:
function greet() { greeting = "Hi"; return greeting; } // ❌ 严格模式下报错
应改为:
function greet() { const greeting = "Hi"; return greeting; }- 或使用参数接收:
function greet(greeting) { return greeting; }
启用严格模式的方法
确保脚本或函数顶部有 "use strict"; 指令:
- 整个脚本启用:
"use strict";放在第一行 - 仅函数启用:
function foo() { "use strict"; ... } - 模块(
.mjs或import场景)默认启用严格模式

















