JavaScript严格模式是规范js代码的一种行为,对代码的提出了更高的要求,会对代码进行错误检查,使js代码更加具有健壮性、安全性。
我们平时使用的是一般模式。要进入严格模式,可以在js文件开头写上
'use strict';
或者这函数开头写上这一句,从而使得函数内部进入严格模式。从这里我们可以看出,函数内部具有自己的作用域。
js的作用域可以分为全局作用域、函数作用域和eval的独立作用域,但是ES5没有块级作用域的说法,块级作用域在ES6用let实现了。
严格模式是向上兼容的。
这里介绍几个严格模式下的要求:
1.不允许使用with。原因是with写出来的代码可读性差,不推荐使用。
2.不允许被声明的变量被赋值。这点是为了防止变量自动提升为全局变量。
3.arguments变为参数的静态副本。
如下面的示例,一般模式返回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)
7.eval、arguments变为了关键字。
8.eval具有了独立作用域。