1.变量必须通过var进行声明,否则将会报错
2.JavaScript禁掉了while关键字
3.普通模式下,Javascript语言有两种变量作用域(scope):全局作用域和函数作用域。严格模式创设了第三种作用域:eval作用域。eval语句的作用域,取决于它处于全局作用域,还是处于函数作用域。严格模式下,eval语句本身就是一个作用域,不再能够生成全局变量了,它所生成的变量只能用于eval内部。
4.为了让代码更安全 禁止this关键字指向全局对象
5.为了让代码更安全 禁止在函数内部遍历调用栈
6.为了让代码更安全 禁止删除变量
7.普通模式下,对一个对象的只读属性进行赋值,不会报错,只会默默地失败。严格模式下,将报错。
8.严格模式下,对禁止扩展的对象添加新属性,会报错。
9.普通模式下,如果对象有多个重名属性,最后赋值的那个属性会覆盖前面的值。严格模式下,这属于语法错误。
10.普通模式下,如果函数有多个重名的参数(解决办法可以用arguments[i]读取)。严格模式下,多个重名的参数这属于语法错误。
11.禁止八进制表示法:普通模式下,整数的第一位如果是0,表示这是八进制数,比如0100等于十进制的64。严格模式禁止这种表示法,整数第一位为0,将报错。
12.arguments对象的限制:arguments是函数的参数对象,严格模式对它的使用做了限制。
1:不允许对arguments赋值
2:arguments不再追踪参数的变化
3:禁止使用arguments.callee 这意味着,我们无法在匿名函数内部调用自身(递归)了。
13.函数必须声明在顶层:将来Javascript的新版本会引入"块级作用域"。为了与新版本接轨,严格模式只允许在全局作用域或函数作用域的顶层声明函数。换句话说,不允许在非函数的代码块内声明函数。
14.不允许使用关键字
为了向将来Javascript的新版本过渡,严格模式新增了一些保留字:implements, interface, let, package, private, protected, public, static, yield。
作者:饥人谷_米弥轮
链接:https://www.jianshu.com/p/7d3f0b082054