jstips 07:使用 “use strict“ 让 JavaScript 开发更安全、更省心
教程【免费下载链接】jstipsThis is about useful JS tips!项目地址https://gitcode.com/gh_mirrors/js/jstips点击查看免费下载本篇技术指南围绕 jstips 项目第 07 号技巧《使用 use strict 变得懒惰》简体中文版英文原版繁体中文版展开讲解 JavaScript 严格模式的原理、两种启用方式、它带来的六项关键行为变化以及在新旧项目中引入严格模式的注意事项。读完本文你将掌握如何用一行指令把粗心的错误交给引擎自动检查写出更安全、更适合大型项目维护的 JavaScript 代码。什么是严格模式让引擎替你查错JavaScript 默认是相当宽容的。以变量为例非严格模式下你可以在从未使用var声明的情况下直接引用一个变量——这对初学者似乎很方便但当变量名拼写错误、或不小心引用了作用域外的变量时这类宽松行为恰恰是大量隐蔽 bug 的源头。严格模式Strict Mode正是为此而生它把开发者常见的粗心错误直接变成 JavaScript 错误让引擎代替我们做那些无聊但必要的检查工作。正如该 tip 所说程序员喜欢让电脑自动检查工作中的失误use strict指令所做的就是把错误转变成可被及时发现的 JavaScript 错误。两种启用方式脚本级与函数级严格模式的使用方式非常灵活可以作用于整个脚本也可以只作用于单个函数内部。方式一放在 JS 文件顶端启用全脚本严格模式// 全脚本严格模式 use strict; var v Hi! Im a strict mode script!;方式二放在函数体内启用函数级严格模式function f() { // 方法级严格模式 use strict; function nested() { return And so am I!; } return Hi! Im a strict mode function! nested(); } function f2() { return Im not strict.; }注意两个示例的细节差异字符串可以用双引号use strict也可以用单引号use strict效果完全一致函数级严格模式只影响该函数及其内部嵌套函数上例中f()内部运行在严格模式而外面的f2()仍是非严格模式。这种粒度控制正是渐进式引入严格模式的关键手段。严格模式改变的关键行为在 JavaScript 文件或函数内引入该指令后引擎会运行在严格模式下禁用一批在大型项目中通常不受欢迎的行为。原 tip 归纳了以下六项核心变化只有被var及let/const声明过的变量才可以引用—— 未声明直接赋值会抛出ReferenceError而不是悄悄创建全局变量从根源上杜绝拼写错误和隐式全局污染。试图写只读变量只读属性时将会报错—— 例如给NaN、undefined等只读全局属性赋值或写入Object.defineProperty定义为writable: false的属性都会抛出TypeError。只能通过new关键字调用构造函数—— 直接以普通函数方式调用构造函数会报错避免了忘记new导致this指向错误、悄悄污染全局的经典问题。this不再隐式指向全局对象—— 普通函数调用中this为undefined而不是默认绑定到window/global防止无意间读写全局状态。对eval()有更严格的限制——eval内声明的变量不再泄漏到外层作用域也禁止在严格模式的eval中引入新的绑定。防止使用保留关键字含未来保留字命名变量—— 诸如implements、interface、package、private、protected、public、static、yield等词汇不再允许作为变量名为语言未来演进留出空间。严格模式同时还收紧了许多其他危险操作禁止使用with语句、禁止给不可删除属性如函数参数执行delete、禁止八进制字面量010这类写法、禁止函数参数重名、arguments与具名参数不再联动等等。对于追求可维护性的大型项目这些限制都是提前暴露问题的保护机制。新旧项目迁移严格模式的适用场景严格模式对新项目是非常友好的——从一开始就处于严格模式可以避免大量早期隐患。但对从未使用过严格模式的老项目来说引入它是有挑战的老代码中可能广泛存在隐式全局变量、with语句、八进制字面量等非严格模式写法直接开启会让存量代码大面积报错。更隐蔽的风险在构建链中如果你的打包流程把所有 JS 文件拼接成一个大型文件而其中某个文件顶部写了use strict那么该指令会作用于整个拼接后的文件导致所有文件都运行在严格模式下原本局部生效的意图被意外放大。这也是为什么实践上更推荐采用函数级严格模式或逐步迁移而非在拼接产物中一刀切地开启全局严格模式。它是表达式不是声明严格模式指令并不是一条语句statement而是一个字符串字面量表达式——它位于脚本或函数的指令序言Directive Prologue中。正因如此早期版本的 JavaScript 引擎会直接忽略它不会产生语法错误这也让严格模式具备了良好的向后兼容性。原 tip 给出的浏览器支持情况如下Internet Explorer 10Firefox 4Chrome 13Safari 5.1Opera 12以上是 2016 年该 tip 撰写时的支持基线如今主流浏览器与现代 Node.js 均已全面支持严格模式可作为默认启用的首选。与仓库内其他技巧的呼应严格模式与 jstips 仓库中的多条 JavaScript 技巧存在直接关联可以串起来阅读变量提升tip 11讲解var声明提升与赋值不提升的机制而严格模式下未声明即引用会直接抛错二者共同构成了对变量作用域的正确理解。var 与 ES6 的 lettip 59let/const本身就是块级作用域与必须声明后使用的更严格选择配合严格模式使用效果更佳。仓库通过 POST_TEMPLATE.md 规定每篇 tip 的元数据格式tip-number、tip-tldr、categories等本篇为第 07 号 tip完整的技巧索引可在 README.md 中查看。小结让严格模式成为你的默认习惯一句话总结use strict不是魔法而是让 JavaScript 引擎替你把粗心的错误变成明确的报错。在可行的情况下新代码优先开启严格模式、函数级启用作为渐进迁移的过渡手段、并留意构建拼接对严格模式范围的放大效应。让引擎替你做检查你就可以把精力留给真正的业务逻辑——这正是该 tip 标题 get lazy变得懒惰的本意。如需更全面的严格模式行为说明可查阅 MDN 的 Strict mode 文档作为延伸资料。赞分享教程【免费下载链接】jstipsThis is about useful JS tips!项目地址https://gitcode.com/gh_mirrors/js/jstips点击查看免费下载相关推荐Slang 编译器解析器白盒特征化测试指南基于 slang-parser.cpp 的覆盖率缺口测试套件深度解析Slang 编译器解析器白盒特征化测试指南基于 slang parser.cpp 的覆盖率缺口测试套件深度解析 导读 本文聚焦 Slang 编译器slang教程jstips 精讲用 use strict 严格模式写出更安全的 JavaScriptjstips 精讲用 use strict 严格模式写出更安全的 JavaScript 导读 本篇基于 jstips 项目第 07 期技巧 _posts教程终极指南在macOS上免费制作Windows启动盘的完整解决方案终极指南在macOS上免费制作Windows启动盘的完整解决方案 你是否曾经在Mac电脑上需要制作Windows启动盘时感到困惑传统的Boot Camp助手桌面应用上一篇GitHub汉化插件终极指南3分钟让GitHub界面全面中文化下一篇GitHub汉化插件终极指南3分钟让GitHub界面全面中文化创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

LLDAP 与 OneDev 集成指南:Generic LDAP 外部认证源完整配置

LLDAP 与 OneDev 集成指南:Generic LDAP 外部认证源完整配置

后端认证鉴权 【免费下载链接】lldap Light LDAP implementation 项目地址: https://gitcode.com/gh_mirrors/ll/lldap 点击查看 免费下载 本指南讲解如何将轻量级 LDAP 服务器 LLDAP 配置为 OneDev 的 Generic LDAP 外部认证源,实现用户使用 LLDAP 中的…

2026/10/12 22:03:47 阅读更多 →
Windows上跑安卓不用再折腾:WSABuilds 5步装完直接用

Windows上跑安卓不用再折腾:WSABuilds 5步装完直接用

Windows上跑安卓不用再折腾:WSABuilds 5步装完直接用 【免费下载链接】WSABuilds Run Windows Subsystem For Android on your Windows 10 and Windows 11 PC using prebuilt binaries with Google Play Store (MindTheGapps) and/or Magisk or KernelSU (root solu…

2026/10/13 10:57:34 阅读更多 →
C#学生信息管理系统三层架构实战:WinForms+ADO.NET分层设计

C#学生信息管理系统三层架构实战:WinForms+ADO.NET分层设计

简介:本资源是一套基于C# Windows平台开发的学生信息管理系统完整源码,面向C#初学者与.NET桌面应用开发者,聚焦三层架构设计与SQL Server数据库实践,解决课程设计、毕业设计及小型教务系统快速搭建需求。压缩包共127个文件&#x…

2026/10/12 10:19:58 阅读更多 →

最新新闻

基于STM32的GPS导航:从NMEA解析到控制量完整实现

基于STM32的GPS导航:从NMEA解析到控制量完整实现

简介:这是一份基于STM32微控制器与UC/GUI图形库的GPS导航系统相关工程源码,面向嵌入式开发者以及正在学习STM32、GPS应用和GUI编程的学生。资源以STM32为主控芯片,通过UART或SPI接口接收GPS模块的NMEA协议数据,完成经纬度解析、定…

2026/10/13 21:09:59 阅读更多 →
Sa-Token过滤器引发CORS误判:OPTIONS预检被拦截的排查与修复

Sa-Token过滤器引发CORS误判:OPTIONS预检被拦截的排查与修复

这个问题的标题里有一个关键词——“误判”。在绝大多数CORS报错的排查复盘里,大家习惯把锅甩给浏览器,觉得它又在发神经。但实际经历过Sa-Token过滤器引发的CORS误判之后,我才意识到,浏览器这个“判官”其实一丝不苟,…

2026/10/13 21:09:59 阅读更多 →
人格障碍诊断系统毕业设计:从判分引擎到报告可视化完整实现

人格障碍诊断系统毕业设计:从判分引擎到报告可视化完整实现

如果你在毕业设计选题里看到“人格障碍诊断系统”这几个字,先别急着把它归类成普通的增删改查项目。这个题目看起来是典型的SpringBootVueMySQL管理信息系统,但真正做起来,它比学生管理系统、图书管理系统多了一层核心业务逻辑——量表测评、…

2026/10/13 21:09:59 阅读更多 →
MLX90614红外测温实战:发射率、SMBus与标定排错全攻略

MLX90614红外测温实战:发射率、SMBus与标定排错全攻略

简介:这是一份基于51单片机与MXL90614红外测温模块的完整工程代码包,适合单片机初学者、嵌入式爱好者以及需要快速实现非接触测温显示的开发者使用。工程直接面向“读取红外传感器—数据处理—LCD1602显示”的完整链路,能帮助读者直接用现成代…

2026/10/13 21:09:59 阅读更多 →
SDR# x86分发包驱动PlutoSDR:从兼容性到采样率与增益调优

SDR# x86分发包驱动PlutoSDR:从兼容性到采样率与增益调优

简介:软件定义无线电(SDR)的核心价值在于用软件替代固定硬件,能灵活适应多种通信协议和频段,近年来受到无线电爱好者、科研人员与工程师的广泛重视。这里提供的是一份针对Pluto SDR设备优化定制的SDR#接收软件包&#…

2026/10/13 21:09:59 阅读更多 →
鸽哒IM源码:生产级私有化即时通讯系统解析

鸽哒IM源码:生产级私有化即时通讯系统解析

简介:这是一套完整的跨平台即时通讯(IM)系统源码,面向中高级Java/Android/iOS开发者及全栈工程师,用于学习和搭建企业级实时通信服务。资源涵盖Web(WebSocketHTML5)、Android(JavaFC…

2026/10/13 21:08:58 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →