如何理解JavaScript中的严格模式作用_JavaScript使用严格模式有哪些好处
发布时间 - 2026-01-08 00:00:00 点击率:次严格模式是执行约束开关,不改变语法能力但提升错误检测:未声明赋值报错、this为undefined、禁止with等;需首行声明,作用域限定于脚本或函数,ES6模块自动启用。
严格模式不是新语法,而是执行约束开关
它不改变 JavaScript 的能力,只改变引擎对代码的“容忍度”:原本静默忽略的问题,会直接报错。比如未声明就赋值——非严格模式下自动挂到 window 上;严格模式下立刻抛出 ReferenceError: username is not defined。
- 它是一条字面量语句:
"use strict";,不是命令也不是函数调用,浏览器不支持时会被忽略(无副作用) - 作用域分两级:整个脚本顶部写,全局生效;函数体第一行写,仅该函数内生效
- ES6 模块(
.mjs或import/export文件)和class内部自动启用严格模式,无需手动加
哪些错误会被提前暴露?重点看这三类典型场景
严格模式真正价值在于把“运行时才崩”的问题,变成“一写就报错”或“一跑就停”,大幅缩
短调试链路。
-
隐式全局变量:
count = 42;在非严格模式下创建window.count;严格模式下直接报错 -
this 绑定更可控:普通函数独立调用时,
this是undefined而非window,避免意外修改全局对象 -
非法操作显式失败:给不可写属性赋值、删除不可配置属性、重复定义对象键名(
{x:1, x:2})、重复函数参数(function foo(a, a) {})都会立即报TypeError或语法错误
为什么现在还要手动加"use strict"?
虽然现代构建工具(如 Webpack、Vite)和模块系统默认启用,但仍有真实场景依赖显式声明:
- 老项目中大量
.js文件未转模块,仍走 script 标签加载,必须靠"use strict";触发 - 某些库源码(如早期版本的 Lodash、jQuery 插件)会在 IIFE 开头手动开启,以保证内部逻辑安全
- 调试时临时加在某段函数里,快速验证是否因非严格行为导致异常(比如
arguments.callee被禁用) - 注意:不能写在条件语句里——
if (true) {"use strict";}无效,必须是脚本/函数的**物理首行**
"use strict";
function test() {
"use strict";
undeclared = "boom"; // ReferenceError
this.x = 1; // 正常,因为 this 是 undefined,赋值被忽略(但不会报错)
return this;
}
test(); // 返回 undefined,而非 window
容易被忽略的兼容性与限制细节
严格模式不是万能补丁,有些行为变化反而会让旧代码直接失效,上线前必须验证:
-
with语句被完全禁止,任何含with(obj) { ... }的代码会直接 SyntaxError - 八进制字面量(
010)非法,必须写成0o10或0x10 -
eval变得更干净:它内部声明的变量不会泄露到外层作用域,但也不能通过eval动态创建函数参数或函数名 - 某些保留字(
class、enum、export、import、super)在严格模式下不能再当变量名,否则 SyntaxError
import 进来的模块也受约束;一个函数开了,不代表它的回调函数自动继承。这点在混合使用 CommonJS 和动态 eval 时尤其容易翻车。
# javascript
# es6
# java
# jquery
# js
# vite
# 浏览器
# 回调函数
# 工具
# win
# 作用域
# 为什么
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
Laravel如何为API编写文档_Laravel API文档生成与维护方法
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
历史网站制作软件,华为如何找回被删除的网站?
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制
青岛网站建设如何选择本地服务器?
免费视频制作网站,更新又快又好的免费电影网站?
晋江文学城电脑版官网 晋江文学城网页版直接进入
北京专业网站制作设计师招聘,北京白云观官方网站?
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
如何在万网主机上快速搭建网站?
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
深圳网站制作的公司有哪些,dido官方网站?
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
Laravel如何实现一对一模型关联?(Eloquent示例)
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
Python文件异常处理策略_健壮性说明【指导】
油猴 教程,油猴搜脚本为什么会网页无法显示?
Laravel如何使用Livewire构建动态组件?(入门代码)
如何用免费手机建站系统零基础打造专业网站?
Android使用GridView实现日历的简单功能
创业网站制作流程,创业网站可靠吗?
如何在阿里云香港服务器快速搭建网站?
*服务器网站为何频现安全漏洞?
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复
Android 常见的图片加载框架详细介绍
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
香港服务器建站指南:免备案优势与SEO优化技巧全解析
网易LOFTER官网链接 老福特网页版登录地址
Laravel怎么连接多个数据库_Laravel多数据库连接配置
如何用低价快速搭建高质量网站?
如何快速重置建站主机并恢复默认配置?
手机网站制作与建设方案,手机网站如何建设?
Laravel怎么使用Intervention Image库处理图片上传和缩放
MySQL查询结果复制到新表的方法(更新、插入)
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
Firefox Developer Edition开发者版本入口
实现点击下箭头变上箭头来回切换的两种方法【推荐】
如何在宝塔面板创建新站点?
EditPlus 正则表达式 实战(3)

