[JavaScript]‘use strict‘是什么?他有什么好处和坏处

本文详细探讨了JavaScript中严格模式的概念,解释了其设立的目的,包括消除语法不合理之处、提升代码安全性、提高编译效率及为未来版本做准备。同时,也提到了严格模式在旧版浏览器如IE6-9中的不兼容问题。

‘use strict’——》严格模式

设立"严格模式"的优点:

  1. 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;

  2. 消除代码运行的一些不安全之处,保证代码运行的安全;

  3. 提高编译器效率,增加运行速度;

  4. 为未来新版本的Javascript做好铺垫。

注:经过测试 IE6,7,8,9 均不支持严格模式。

缺点:
现在网站的 JS 都会进行压缩,一些文件用了严格模式,而另一些没有。这时这些本来是严格模式的文件,被 merge 后,这个串就到了文件的中间,不仅没有指示严格模式,反而在压缩后浪费了字节。

<think>好的,我需要回答用户关于JavaScript中'use strict'的含义作用的问题。首先,我得回忆一下严格模式的基本概念。严格模式是ES5引入的,用来让代码在更严格的条件下运行,帮助开发者避免一些常见的错误,同时禁用了一些不推荐的语法。 用户可能想知道为什么需要使用它,以及它具体有什么作用。我应该从含义、作用、使用方式注意事项几个方面来组织回答。根据用户提供的引用,特别是引用[1][2],虽然它们没有直接提到严格模式,但引用[2]提到原型对象的重要性,这可能与严格模式中的一些限制相关,比如禁止使用未声明的变量,或者限制this的指向。 首先,严格模式的定义,需要在脚本或函数开头添加'use strict'。然后,它的主要作用包括:捕获常见错误,如未声明的变量;禁止不安全的操作,比如删除变量或函数参数;简化evalarguments的使用;以及改变this的默认指向,全局作用域中this不再是window而是undefined,防止意外创建全局变量。 接下来,需要举一些例子来说明这些变化。例如,在非严格模式下,未声明的变量会隐式成为全局变量,而严格模式会抛出错误。再比如,试图删除变量或函数参数会导致语法错误。另外,在构造函数中,如果忘记使用new,this不会指向全局对象,而是保持undefined,从而避免意外覆盖全局变量。 关于使用方式,应该提到在脚本文件开头或函数体顶部添加'use strict'。但要注意,合并多个脚本时,如果有些脚本没有使用严格模式,可能会导致问题。此外,现代模块系统如ES6模块默认启用严格模式,所以在这种情况下可能不需要显式声明。 注意事项方面,严格模式一旦启用无法取消,所以在代码中混用严格非严格模式需要小心。另外,一些旧版浏览器可能不支持严格模式,但现代浏览器基本都支持了,这个问题现在可能不那么突出,但还是要提一下。 然后,根据用户提供的引用,虽然引用[3]提到OAuth2.0JWT,这可能与当前问题无关,但需要确保回答不偏离主题。引用[1]提到使用内置函数如filter来提高效率,可能可以关联到严格模式帮助写出更规范的代码,从而提升代码质量。 最后,生成相关问题,需要涵盖严格模式的其他方面,比如兼容性、常见错误、与ES6模块的关系,以及实际应用场景。例如,严格模式如何影响变量声明、在ES6中的必要性、实际项目中的应用案例等。 现在需要检查是否有遗漏点,比如严格模式对八进制字面量的限制,重复的函数参数名的禁止,以及eval的独立作用域等。这些也是严格模式的重要部分,应该提到。 总结起来,回答的结构应该是:含义、主要作用、使用方式、注意事项,然后相关问题。确保每个部分都有清晰的例子解释,帮助用户逐步理解。</think>### 'use strict' 的含义作用 **1. 含义** `'use strict'` 是 JavaScript 的一种严格模式(Strict Mode),通过添加此指令,代码会在更严格的语法规则下执行,帮助开发者避免常见错误,并禁用一些不推荐或危险的语法特性[^1]。 --- **2. 主要作用** - **捕获错误** 未声明的变量赋值会直接报错(非严格模式下会隐式创建全局变量): ```javascript 'use strict'; x = 10; // 报错:x is not defined ``` - **禁止不安全操作** 删除变量、函数参数等操作会报错: ```javascript 'use strict'; let a = 1; delete a; // 报错:Delete of an unqualified identifier in strict mode ``` - **简化 `eval` `arguments`** `eval` 不再在外部作用域引入变量,`arguments` 不再与形参动态绑定: ```javascript 'use strict'; function test(x) { arguments[0] = 2; console.log(x); // 输出原值(非严格模式下输出2) } test(1); ``` - **修改 `this` 默认行为** 全局作用域中 `this` 为 `undefined`(非严格模式下指向 `window`),防止意外创建全局变量: ```javascript 'use strict'; function test() { console.log(this); // 输出 undefined } test(); ``` --- **3. 使用方式** - **脚本级启用**:在文件或 `<script>` 标签的首行添加 `'use strict'`。 - **函数级启用**:在函数体首行添加(仅对该函数生效): ```javascript function strictFunc() { 'use strict'; // 严格模式代码 } ``` --- **4. 注意事项** - 严格模式无法通过语法取消,需避免与非严格模式代码混用。 - 现代模块(ES6 Module)类(Class)默认启用严格模式,无需显式声明[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值