Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
haizhilin2013 opened this issue May 3, 2019 · 15 comments
Labels
js JavaScript

Comments

@haizhilin2013
Copy link
Collaborator

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

@haizhilin2013 haizhilin2013 added the js JavaScript label May 3, 2019
@github-linong
Copy link

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

设立"严格模式"的目的,主要有以下几个:
  - 消除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
Copy link

  • use strict
    严格模式,避免一些不必要的错误
    严格模式下的 全局中的this 是undefined 不是window

@AricZhu
Copy link

AricZhu commented Jul 6, 2019

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

@Konata9
Copy link

Konata9 commented Jul 29, 2019

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

使用严格模式的好处在于

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

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

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

@rennzhang
Copy link

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 做好铺垫。

缺点:

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

来和我一起刷3+1吧
gitHub: https://github.com/Renato-Z/exercises/blob/master/history.md

@blueRoach
Copy link

use strict是严格模式
优点:

  • 消除JS的一些不严谨、不合理的地方和一些怪异行为
  • 消除了代码一些不安全的地方、保证代码安全运行
  • 提高编译效率,增加运行速度
  • 为未来新版本做铺垫

缺点:

@MrZ2019
Copy link

MrZ2019 commented Sep 16, 2020

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

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

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

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

@378406712
Copy link

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

@zxcdsaqwe123
Copy link

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

@amikly
Copy link

amikly commented Nov 5, 2021

含义

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

优点

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

缺点

  • 某些代码在严格模式下会报错,尤其引入公用与第三方模块的时候需要注意

  • 有些严格模式的特性在不同浏览器的支持情况不同,需要注意兼容问题

@github-cxtan
Copy link

为什么使用严格模式:

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

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

@xiaoqiangz
Copy link

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

@WangXi01
Copy link

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

@never123450
Copy link

"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
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
js JavaScript
Projects
None yet
Development

No branches or pull requests