浏览器控制台、行内和node.js repl默认均非严格模式,须显式启用;esm模块(.mjs、type="module"等)则自动启用严格模式。

浏览器控制台、行内 <script></script> 和 Node.js REPL 环境中,严格模式都不是默认启用的,必须显式开启。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
浏览器控制台(DevTools Console)
- 默认是非严格模式
- 即使页面其他脚本用了
"use strict",控制台本身不受影响 - 想启用严格模式,需手动输入:
"use strict"; x = 10; // ReferenceError: x is not defined
- 注意:
"use strict"必须是当前执行上下文的第一条可执行语句(不能前面有注释或空行干扰)
行内 <script></script> 标签
- 默认是非严格模式
- 只有在
<script></script>内顶部第一行写"use strict";才会生效(全局严格模式) - 示例:
<script> "use strict"; x = 10; // 报错:ReferenceError </script>
- 若写在函数内部第一行,则只对该函数启用严格模式
- 普通 HTML 中的
<script></script>不含type="module"时,永远不自动进入严格模式
Node.js REPL 环境
- 默认是非严格模式
- 可通过启动参数强制进入:
node --use_strict
- 进入后,所有输入语句都按严格模式解析:
> x = 10 ReferenceError: x is not defined
- 不加参数启动的
node,即使你输入"use strict";,也不会改变后续语句的模式——因为 REPL 是逐行eval,而"use strict"在非模块环境中无法“污染”下一行 - 唯一可靠方式:启动时加
--use_strict
对比 ESM 模块(补充说明)
-
.mjs文件、<script type="module"></script>、import()动态导入的模块 -
自动启用严格模式,无需
"use strict" - 解析阶段就校验语法,非法操作直接报
SyntaxError,不执行 - 这是语言规范强制行为,和 REPL 或普通脚本完全不同
不复杂但容易忽略










