JavaScript严格模式的使用是规范js代码的一种行为,它对代码提出了更高的要求,会对代码进行错误检查,使js代码更加具备健壮性、安全性。安全
咱们平时使用的是通常模式。要进入严格模式,能够在js文件开头写上函数
'use strict';
或者在函数开头写上这一句,从而使得函数内部进入严格模式。从这里咱们能够看出,函数内部具备本身的做用域。spa
提及做用域,js的做用域能够分为全局做用域、函数做用域和eval的独立做用域,虽然ES5没有块级做用域的说法,可是块级做用域在ES6用let实现了。code
严格模式是向上兼容的。对象
这里介绍几个严格模式下的要求:blog
1.不容许使用with。缘由是with写出来的代码可读性差,不推荐使用。(with里的代码块能够直接使用传入的对象的属性)ip
2.不容许未被声明的变量被赋值。这点是为了防止变量在不经意间自动提高为全局变量。如作用域
var a = b = 1
这句代码中b就被自动提高为全局变量。字符串
3.arguments变为参数的静态副本。it
以下面的示例,通常模式输出100,严格模式输出1。
'use strict' function f(a){ arguments[0] = 100 return a } document.write(f(1))
4.使用运算符delete删除一些不能够删除的东西(如参数、函数名、不可配置的属性等)报错。(delete本来是用来删除对象的属性的。)
5.对象字面量重复属性名报错。
6.禁止使用八进制字面量,如
var a = 0123 console.log(a)
在通常模式下输出十进制数83,而严格模式下则报错。
7.eval、arguments变为了关键字,不能用于函数名、变量。
8.eval函数具备了独立做用域。(eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。)
eval('var b = 2;') console.log(b)
在通常模式下输出2,而严格模式下则报错。