聊聊JS严格模式

129 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情

ES5引入的一种新的JS运行模式,在严格模式下可以改变JS历史上遗留的一些不合理的语法或运行行为(这些语法或行为不能在普通模式下直接改变,因为会造成之前的老代码出问题),JS严格模式是为了在JS中引入新特性又不致于破坏老代码而产生的解决方案。

使用字符串字面量 ‘use strict’使脚本、

在严格模式下:

1. 全局变量必须先声明才能使用(包括赋值)

2. 禁止使用with关键字

3. eval执行在eval作用域中(这个作用域是新增的),这样eval就不会影响全局作用域或函数作用域了(同时也无法修改全局作用域中的变量)

4. this不会也不能指向全局作用域(window对象),这样构造函数不加new调用就会报错,从而不至于影响全局作用域

5. 禁止访问arguments.caller(表示调用当前函数的函数)、arguments.callee(表示当前函数自已,通常在js早期版本用于匿名函数递归调用),也不能通过函数名访问arguments,但对arguments的其它使用(如获取实参)是正常的!

6. arguments不可被赋值,也不再追踪参数值的变化(arguments中的值不会变)

7. 禁止使用delete删除变量(但删除对象的属性是正常的)

8. 显式报错(程序会停止执行),而不是沉默忽略错误(如对只读属性赋值、对禁止扩展的对象添加属性、删除不能删除的属性、属性名重复、参数名重复)

9. 不支持八进制,整数第1位是0将报错

10. 函数不能在if{}、for{}等{}内部声明(以后版本会引入块级作用域)

11. 新implements, interface, let, package, private, protected, public, static, yield关键字,不能使用这些名称作为变量名,函数名、参数名等