js的严格模式会使得代码在严格的模式下运行,严格模式是通过 "use strict"; 开启。严格模式可以在js文件中开启严格模式,也可以对某一个函数开启严格模式。
严格模式有着如下好处:
-
严格模式下,静默错误会报错
- 比如不使用关键字声明变量就是一个静默错误
message = "hello"
- 比如不使用关键字声明变量就是一个静默错误
-
js引擎在执行代码时可以进行更多的优化
严格模式限制(重点):
-
标识符不能用“保留字”命名
-
声明变量必须要有关键字 message = "message";
-
不允许使用0开头作为八进制,要写成“0o开头”(0x十六进制,0o八进制,0b二进制)
-
严格模式下“函数独立调用”函数中的this指向undefined,不会默认绑定为window
-
setTimeout传入的函数是通过apply调用this绑定为了window,在严格模式下,普通函数的this依然指向window(箭头去上层查找)
-
静默错误:
true.foo = "123";
NaN = 123;
var obj={}; Object.defineProperty(obj, "name", {writable:false, value="w"}); obj.name="1";
-
不允许函数有相同的参数名 fn(x,x);
-
with()不允许使用
-
eval()传入字符串作为js解析如果创建了变量,不能被使用的