“use strict” 声明时,代码将会在严格模式下执⾏。严格模式包含了⼀些额外的规则和限制。
使⽤ “use strict” 的主要作⽤包括:
- 变量必须声明后再使⽤,不能通过不使⽤关键字创建全局变量
- 不能通过 delete 操作符删除变量(包括对象和函数)
- 不允许使⽤转义字符
- 不允许函数参数重名
- 变量名不能使⽤ eval 或 arguments
- 不能使⽤ 0 作为开头表示⼋进制,⽽是应使⽤ 0o
- 禁⽌ this 默认指向全局对象 window
- 不可修改对象的只读属性(writable = false)
- 不可使⽤ delete 操作符删除对象的不可配置属性(configurable = false)
- 不能修改对象中只定义了 getter() ⽆设置 setter() 的属性
- 不能读取对象中只定义了 setter() ⽆设置 getter() 的属性
- 不能使⽤ with 语句
- eval 不会在它的外层作⽤域引⼊变量
- 淘汰 arguments.callee 和 arguments.caller
- 增加了⼀些保留字,不能作为变量名:implements、interface、let、package、private、protected、public、static、yield。
使⽤ “use strict” 的⽅式有两种:
- 在 JavaScript ⽂件开头使⽤ “use strict”。
- 在函数体内第⼀条语句中使⽤ “use strict”。
优点:
- 消除 JS 语法的⼀些不合理、不严谨之处,减少⼀些怪异⾏为。
- 提⾼代码的可靠性和可维护性,避免代码运⾏时出现意外。
- 提⾼编译器效率,增加代码运⾏速度。
缺点: - IE10 以下不⽀持严格模式。
- 由于某些库和框架可能依赖于 JS 的⼀些⾮标准⾏为,在严格模式下这些⾏为可能会失效。
- 如今⼤部分⽹站都会对 JS 进⾏合并压缩,⼀些⽂件开启了严格模式,⽽另⼀些没有。这些原本是严格模式的⽂件被压缩后就成为了⼤⽂件的某⼀部分,不仅没有了严格模式,还在压缩后浪费了字节。
注意:ES6 的模块⾃动采⽤严格模式,不管有⽆在头部加上 “use strict”;。