什么是严格模式_JavaScript中如何启用它

发布时间 - 2026-01-13 00:00:00    点击率:
严格模式是JavaScript的限制性变体,通过"use strict"启用,增强错误检查、禁用不安全语法、修正this绑定,并在ES6模块和class中默认启用。

严格模式在 JavaScript 中的作用是什么

严格模式不是一种新语言,而是 JavaScript 的一种限制性变体,它让引擎对代码执行更严格的检查。启用后,原本静默失败的操作(比如给只读属性赋值、使用未声明变量)会直接抛出 TypeErrorReferenceError;一些不安全或易混淆的语法(如 with 语句、八进制字面量 010)会被禁止;同时,this 在非对象上下文中的值不再是全局对象,而是 undefined

如何在脚本或函数中启用严格模式

必须通过字面量字符串 "use strict" 声明,且它必须是作用域内**最前面的可执行语句**(注释或空行可以出现在它之前,但不能有其他 JS 语句)。

  • 整个脚本启用:把 "use strict" 放在文件顶部第一行(或模块顶层)
  • 仅函数内启用:把 "use strict" 放在函数体第一行(包括箭头函数不可用,因无函数体)
  • 不能混用:不能在同一个作用域里部分启用,也不能在 if 块或循环中动态开启
"use strict";
function foo() {
  "use strict"; // ✅ 函数级启用
  eval("var x = 1"); // ❌ 严格模式下 eval 不创建变量到外层
  undeclared = 42; // ❌ ReferenceError: undeclared is not defined
}

严格模式下常见的报错场景

很多看似“能跑通”的旧写法,在严格模式下会立刻暴露问题:

  • delete 操作符不能删除不可配置属性,否则抛 TypeError
  • 函数参数名重复(如 function f(a, a) {})直接语法错误
  • arguments.calleearguments.caller 被禁用,访问即报 TypeError
  • 对象字面量中重复属性名(如 {a: 1, a: 2})在严格模式下是语法错误(某些老引擎可能忽略)
  • evalarguments 不能作为变量名或函数参数名

现代开发中还需要手动加 "use strict" 吗

ES6 模块(.mjs 文件或 )和类(class)内部默认启用严格模式,无需显式声明。但普通 标签加载的脚本、CommonJS 模块(Node.js 中的 .js)、以及 IIFE 包裹的代码仍需手动添加 —— 尤其当你不确定运行环境是否已默认启用时。

容易被忽略的一点是:如果一个函数在严格模式下定义,它的嵌套函数即使没写 "use strict",也自动继承严格模式;但反过来不成立 —— 非严格函数里的子函数不会自动变严格。


# javascript  # es6  # java  # js  # node.js  # node  # 作用域  # red 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  如何快速生成橙子建站落地页链接?  Laravel如何优化应用性能?(缓存和优化命令)  免费视频制作网站,更新又快又好的免费电影网站?  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  中国移动官方网站首页入口 中国移动官网网页登录  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  javascript中闭包概念与用法深入理解  长沙企业网站制作哪家好,长沙水业集团官方网站?  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  教学论文网站制作软件有哪些,写论文用什么软件 ?  开心动漫网站制作软件下载,十分开心动画为何停播?  如何在万网利用已有域名快速建站?  BootStrap整体框架之基础布局组件  Python进程池调度策略_任务分发说明【指导】  如何快速生成高效建站系统源代码?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  php json中文编码为null的解决办法  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  音乐网站服务器如何优化API响应速度?  简单实现Android文件上传  php结合redis实现高并发下的抢购、秒杀功能的实例  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  js实现点击每个li节点,都弹出其文本值及修改  如何快速启动建站代理加盟业务?  Laravel如何使用Eloquent进行子查询  高防服务器租用首荐平台,企业级优惠套餐快速部署  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  详解Huffman编码算法之Java实现  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  如何在IIS7中新建站点?详细步骤解析  如何在景安服务器上快速搭建个人网站?  如何在阿里云服务器自主搭建网站?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  微信小程序 input输入框控件详解及实例(多种示例)  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  Laravel如何使用.env文件管理环境变量?(最佳实践)  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  Laravel中的Facade(门面)到底是什么原理  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  微信小程序制作网站有哪些,微信小程序需要做网站吗?  Linux网络带宽限制_tc配置实践解析【教程】  网站建设整体流程解析,建站其实很容易!  历史网站制作软件,华为如何找回被删除的网站?