haizlin / fe-interview

前端面试每日 3+1,以面试题来驱动学习,提倡每日学习与思考,每天进步一点!每天早上5点纯手工发布面试题(死磕自己,愉悦大家),6000+道前端面试题全面覆盖,HTML/CSS/JavaScript/Vue/React/Nodejs/TypeScript/ECMAScritpt/Webpack/Jquery/小程序/软技能……
http://www.h-camel.com
MIT License
25.43k stars 3.26k forks source link

[js] 第18天 你理解的"use strict";是什么?使用它有什么优缺点? #60

Open haizhilin2013 opened 5 years ago

haizhilin2013 commented 5 years ago

第18天 你理解的"use strict";是什么?使用它有什么优缺点?

github-linong commented 5 years ago

严格模式,其实就是更严格了

设立"严格模式"的目的,主要有以下几个:   - 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;   - 消除代码运行的一些不安全之处,保证代码运行的安全;   - 提高编译器效率,增加运行速度;   - 为未来新版本的Javascript做好铺垫。

我放几个常见的吧,详情可以去下面的文章中看

  1. 禁止this关键字指向全局对象
  2. 禁止在函数内部遍历调用栈
  3. 全局变量必须显式声明
  4. arguments不再追踪参数的变化
    (function(){
    "use strict"
    b=1//Uncaught ReferenceError: b is not defined
    })()

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Strict_mode http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html

myprelude commented 5 years ago
AricZhu commented 5 years ago

严格模式。 此时全局中的this是undefined,而不是window。 严格模式其实还是为了缓解js语言的全局变量特性的缺陷而提出来的一种暂时的解决办法

Konata9 commented 5 years ago

由于历史原因 JavaScript 在错误提示方面做的并不完善。比如允许定义未声明的变量、不允许使用八进制数字、不允许函数参数重名、不允许删除不可删除的属性。

使用严格模式的好处在于

总的来说,使用严格模式会让我们的代码更加健壮。不过随着 TypeScript 的出现,我们更应该使用 TS 来规范我们的代码。

参考文章: JavaScript 严格模式(use strict)

rennzhang commented 4 years ago

use strict:严格模式

说明:

  1. 使调试更加容易。那些被忽略或默默失败了的代码错误,会产生错误或抛出异常,因此尽早提醒你代码中的问题,你才能更快地指引到它们的源代码。
  2. 变量在赋值之前必须声明,防止意外的全局变量。如果没有严格模式,将值分配给一个未声明的变量会自动创建该名称的全局变量。这是 JavaScript 中最常见的错误之一。在严格模式下,这样做的话会抛出错误。
  3. 取消this值的强制转换。如果没有严格模式,引用 null 或未定义的值到 this 值会自动强制到全局变量。在严格模式下,引用 null 或未定义的 this 值会抛出错误。严格模式下,全局中的this 是undefined 不是window
  4. 不允许重复的属性名称或参数值
  5. 使 eval() 更安全。在严格模式和非严格模式下, eval() 的行为方式有所不同。最显而易见的是,在严格模式下,变量和声明在 eval() 语句内部的函数不会在包含范围内创建(它们会在非严格模式下的包含范围中被创建,这也是一个常见的问题源)。
  6. 在 delete 使用无效时抛出错误。 delete 操作符(用于从对象中删除属性)不能用在对象不可配置的属性上。当试图删除一个不可配置的属性时,非严格代码将默默地失败,而严格模式将在这样的情况下抛出异常。
  7. 严格模式去除了with语句
  8. 不能修改arguments ,不能在函数内定义arguments变量 ,不能使用arugment.caller和argument.callee。因此如果你要引用匿名函数,需要对匿名函数命名

优点:

  1. 消除 Javascript 语法的一些不合理、不严谨之处,减少一些怪异行为;
  2. 消除代码运行的一些不安全之处,保证代码运行的安全;
  3. 提高编译器效率,增加运行速度;
  4. 为未来新版本的 Javascript 做好铺垫。

缺点:

blueRoach commented 4 years ago

use strict是严格模式 优点:

缺点:

smile-2008 commented 4 years ago

严格模式,其实就是更严格了

设立"严格模式"的目的,主要有以下几个:   - 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;   - 消除代码运行的一些不安全之处,保证代码运行的安全;   - 提高编译器效率,增加运行速度;   - 为未来新版本的Javascript做好铺垫。

我放几个常见的吧,详情可以去下面的文章中看

禁止this关键字指向全局对象 禁止在函数内部遍历调用栈 全局变量必须显式声明 arguments不再追踪参数的变化 (function(){ "use strict" b=1//Uncaught ReferenceError: b is not defined })()

378406712 commented 3 years ago

严格模式,es5中新增,在严格模式下不能使用未声明的变量

zxcdsaqwe123 commented 3 years ago

在'use strict';后,必须更规范的写代码,且更容易发现代码中的错误

amikly commented 2 years ago

含义

ECMAScript 5的严格模式是采用具有限制性JavaScript变体的一种方式,从而使代码隐式地脱离“马虎模式/稀松模式/懒散模式“(sloppy)模式。顾名思义,这种模式使得Javascript在更严格的条件下运行

优点

缺点

github-cxtan commented 2 years ago

为什么使用严格模式:

消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为; 消除代码运行的一些不安全之处,保证代码运行的安全; 提高编译器效率,增加运行速度; 为未来新版本的Javascript做好铺垫。 "严格模式"体现了Javascript更合理、更安全、更严谨的发展方向,包括IE 10在内的主流浏览器,都已经支持它,许多大项目已经开始全面拥抱它。

另一方面,同样的代码,在"严格模式"中,可能会有不一样的运行结果;一些在"正常模式"下可以运行的语句,在"严格模式"下将不能运行。掌握这些内容,有助于更细致深入地理解Javascript,让你变成一个更好的程序员。

xiaoqiangz commented 2 years ago

严格模式,使用严格模式下 未声明的变量会报错,全局下的this不是window而是undefind.

WangXi01 commented 2 years ago

严格模式,不怎么了解,记录一下,是为了缓解js语言全局变量特性提出的一种暂时性方案。

never123450 commented 1 year ago

"use strict" 是 JavaScript 中的一个指令,用于启用严格模式(strict mode)。严格模式是一种更加严格的 JavaScript 解析和错误处理模式,它有以下特点:

  1. 变量必须声明:在严格模式下,变量必须通过 var、let 或 const 关键字进行声明,否则会抛出错误。

  2. 禁止使用未声明的变量:在严格模式下,使用未声明的变量会抛出错误。

  3. 删除变量或函数会报错:在严格模式下,无法通过 delete 操作符删除变量、函数或函数的参数。

  4. 禁止重复的参数名:在严格模式下,函数的参数名不能重复。

  5. 禁止使用八进制字面量:在严格模式下,八进制字面量(以 0 开头)无效。

  6. 保留字不能作为变量名:在严格模式下,保留字(如 implements、interface、let、package 等)不能作为变量名。

使用严格模式的优点包括:

  1. 更强的错误检查:严格模式下,会抛出更多的错误,帮助开发人员捕获潜在的错误和问题。

  2. 提高代码质量:严格模式要求使用更规范的语法和编码习惯,可以帮助开发人员编写更高质量、更易于维护的代码。

  3. 提升性能:严格模式下,由于禁止某些不推荐的语法和操作,可以提升代码的执行效率。

然而,使用严格模式也有一些缺点:

  1. 兼容性问题:严格模式可能与一些旧的 JavaScript 代码或库不兼容,需要进行适当的调整和修改。

  2. 限制了一些灵活性:严格模式下,某些不推荐的语法和操作被禁止,可能会限制一些灵活性和便利性。

总的来说,使用"use strict" 启用严格模式可以提高代码的质量和性能,帮助开发人员捕获错误。但在应用严格模式时,需要注意兼容性问题,并根据具体情况权衡是否使用。

lili-0923 commented 8 months ago

严格模式 禁止this关键字指向全局对象 禁止在函数内部遍历调用栈 全局变量必须显式声明 arguments不再追踪参数的变化