JS高程读书笔记——严格模式

要选择进入严格模式,可以使用严格模式的编译指示:

'use strict';

支持严格模式的引擎会自动启用这种模式,而不支持该模式的引擎就当遇到了一个未赋值的字符串字面量,会忽略这个编译指示。

如果是在全局作用于中给出这个编译指示,则整个脚本都将使用严格模式。也可选择只在函数中打开严格模式。

1 function doSomething () {
2     'use strict';
3     // do something
4 }

 

严格模式下:

1. 给一个没有使用 var 声明的变量赋值,代码会在执行时抛出 ReferenceError ;对变量调用 delete 操作符(非严格模式允许这样做,但会静默失败)会抛出 ReferenceError 。

2. 为只读属性赋值、对不可配置的属性使用 delete 操作符、为不可扩展的对象添加属性 均会抛出 TypeError 。

3. 要求命名函数的参数必须唯一,以及此时访问 arguments.calleearguments.caller 会抛出 TypeError 。严格模式下只能在脚本的顶级和函数内部声明函数。(也就是说,在 if 语句中声明函数会导致语法错误)

4. eval() 中声明的变量不会成为局部变量,而是只能在被求值的特殊作用域中有效,随后就将被销毁。

5. 禁止使用 evalarguments 作为标识符,也不允许读写他们的值。

6. 函数的 this 值始终是指定的值,无论指定的是什么值。不会出现非严格模式中使用 apply()call() 方法时,nullundefined 值被转换为全局对象的情况。

 

posted @ 2017-07-18 20:33  Mangi  阅读(221)  评论(0)    收藏  举报