Open haizhilin2013 opened 5 years ago
严格模式,其实就是更严格了
设立"严格模式"的目的,主要有以下几个: - 消除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。
因此如果你要引用匿名函数,需要对匿名函数命名来和我一起刷3+1吧 gitHub: https://github.com/Renato-Z/exercises/blob/master/history.md
use strict是严格模式 优点:
缺点:
严格模式,其实就是更严格了
设立"严格模式"的目的,主要有以下几个: - 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为; - 消除代码运行的一些不安全之处,保证代码运行的安全; - 提高编译器效率,增加运行速度; - 为未来新版本的Javascript做好铺垫。
我放几个常见的吧,详情可以去下面的文章中看
禁止this关键字指向全局对象 禁止在函数内部遍历调用栈 全局变量必须显式声明 arguments不再追踪参数的变化 (function(){ "use strict" b=1//Uncaught ReferenceError: b is not defined })()
严格模式,es5中新增,在严格模式下不能使用未声明的变量
在'use strict';后,必须更规范的写代码,且更容易发现代码中的错误
ECMAScript 5的严格模式是采用具有限制性JavaScript变体的一种方式,从而使代码隐式地脱离“马虎模式/稀松模式/懒散模式“(sloppy)模式。顾名思义,这种模式使得Javascript在更严格的条件下运行
某些代码在严格模式下会报错,尤其引入公用与第三方模块的时候需要注意
有些严格模式的特性在不同浏览器的支持情况不同,需要注意兼容问题
为什么使用严格模式:
消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为; 消除代码运行的一些不安全之处,保证代码运行的安全; 提高编译器效率,增加运行速度; 为未来新版本的Javascript做好铺垫。 "严格模式"体现了Javascript更合理、更安全、更严谨的发展方向,包括IE 10在内的主流浏览器,都已经支持它,许多大项目已经开始全面拥抱它。
另一方面,同样的代码,在"严格模式"中,可能会有不一样的运行结果;一些在"正常模式"下可以运行的语句,在"严格模式"下将不能运行。掌握这些内容,有助于更细致深入地理解Javascript,让你变成一个更好的程序员。
严格模式,使用严格模式下 未声明的变量会报错,全局下的this不是window而是undefind.
严格模式,不怎么了解,记录一下,是为了缓解js语言全局变量特性提出的一种暂时性方案。
"use strict" 是 JavaScript 中的一个指令,用于启用严格模式(strict mode)。严格模式是一种更加严格的 JavaScript 解析和错误处理模式,它有以下特点:
变量必须声明:在严格模式下,变量必须通过 var、let 或 const 关键字进行声明,否则会抛出错误。
禁止使用未声明的变量:在严格模式下,使用未声明的变量会抛出错误。
删除变量或函数会报错:在严格模式下,无法通过 delete 操作符删除变量、函数或函数的参数。
禁止重复的参数名:在严格模式下,函数的参数名不能重复。
禁止使用八进制字面量:在严格模式下,八进制字面量(以 0 开头)无效。
保留字不能作为变量名:在严格模式下,保留字(如 implements、interface、let、package 等)不能作为变量名。
使用严格模式的优点包括:
更强的错误检查:严格模式下,会抛出更多的错误,帮助开发人员捕获潜在的错误和问题。
提高代码质量:严格模式要求使用更规范的语法和编码习惯,可以帮助开发人员编写更高质量、更易于维护的代码。
提升性能:严格模式下,由于禁止某些不推荐的语法和操作,可以提升代码的执行效率。
然而,使用严格模式也有一些缺点:
兼容性问题:严格模式可能与一些旧的 JavaScript 代码或库不兼容,需要进行适当的调整和修改。
限制了一些灵活性:严格模式下,某些不推荐的语法和操作被禁止,可能会限制一些灵活性和便利性。
总的来说,使用"use strict" 启用严格模式可以提高代码的质量和性能,帮助开发人员捕获错误。但在应用严格模式时,需要注意兼容性问题,并根据具体情况权衡是否使用。
严格模式 禁止this关键字指向全局对象 禁止在函数内部遍历调用栈 全局变量必须显式声明 arguments不再追踪参数的变化
第18天 你理解的"use strict";是什么?使用它有什么优缺点?