第18天 你理解的"use strict";是什么?使用它有什么优缺点?
严格模式,其实就是更严格了
设立"严格模式"的目的,主要有以下几个:
- 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
- 消除代码运行的一些不安全之处,保证代码运行的安全;
- 提高编译器效率,增加运行速度;
- 为未来新版本的Javascript做好铺垫。
我放几个常见的吧,详情可以去下面的文章中看
(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
严格模式。
此时全局中的this是undefined,而不是window。
严格模式其实还是为了缓解js语言的全局变量特性的缺陷而提出来的一种暂时的解决办法
由于历史原因 JavaScript 在错误提示方面做的并不完善。比如允许定义未声明的变量、不允许使用八进制数字、不允许函数参数重名、不允许删除不可删除的属性。
使用严格模式的好处在于
总的来说,使用严格模式会让我们的代码更加健壮。不过随着 TypeScript 的出现,我们更应该使用 TS 来规范我们的代码。
使调试更加容易
。那些被忽略或默默失败了的代码错误,会产生错误或抛出异常,因此尽早提醒你代码中的问题,你才能更快地指引到它们的源代码。变量在赋值之前必须声明,防止意外的全局变量
。如果没有严格模式,将值分配给一个未声明的变量会自动创建该名称的全局变量。这是 JavaScript 中最常见的错误之一。在严格模式下,这样做的话会抛出错误。取消this值的强制转换
。如果没有严格模式,引用 null 或未定义的值到 this 值会自动强制到全局变量。在严格模式下,引用 null 或未定义的 this 值会抛出错误。严格模式下,全局中的this 是undefined 不是window
不允许重复的属性名称或参数值
。使 eval() 更安全
。在严格模式和非严格模式下, eval() 的行为方式有所不同。最显而易见的是,在严格模式下,变量和声明在 eval() 语句内部的函数不会在包含范围内创建(它们会在非严格模式下的包含范围中被创建,这也是一个常见的问题源)。在 delete 使用无效时抛出错误。
delete 操作符(用于从对象中删除属性)不能用在对象不可配置的属性上。当试图删除一个不可配置的属性时,非严格代码将默默地失败,而严格模式将在这样的情况下抛出异常。严格模式去除了with语句
不能修改arguments ,不能在函数内定义arguments变量 ,不能使用arugment.caller和argument.callee。
因此如果你要引用匿名函数,需要对匿名函数命名use strict是严格模式
优点:
缺点:
严格模式,其实就是更严格了
设立"严格模式"的目的,主要有以下几个:
- 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
- 消除代码运行的一些不安全之处,保证代码运行的安全;
- 提高编译器效率,增加运行速度;
- 为未来新版本的Javascript做好铺垫。
我放几个常见的吧,详情可以去下面的文章中看
禁止this关键字指向全局对象
禁止在函数内部遍历调用栈
全局变量必须显式声明
arguments不再追踪参数的变化
(function(){
"use strict"
b=1//Uncaught ReferenceError: b is not defined
})()
Most helpful comment
严格模式,其实就是更严格了
我放几个常见的吧,详情可以去下面的文章中看
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Strict_mode
http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html