ECMAscript 5运行模式:严格模式strict mode
strict mode是什么?
除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)。这种模式使得Javascript在更严格的条件下运行,体现了Javascript更合理、更安全、更严谨的发展方向。
有什么用?
- 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
- 消除代码运行的一些不安全之处,保证代码运行的安全;
- 提高编译器效率,增加运行速度;
- 为未来新版本的Javascript做好铺垫。
调用方法
1.针对整个脚本文件:放在脚本文件的第一行,则整个脚本都将以"严格模式"运行。
2.针对单个函数:将"use strict"放在函数体的第一行,则整个函数以"严格模式"运行。
<script> "use strict"; console.log("这是严格模式。"); </script> //整个脚本调用的变更写法:整个脚本文件放在一个立即执行的匿名函数中,利于文件合并 (function (){ "use strict"; console.log("整个脚本严格模式的变更写法"); })(); function strict(){ "use strict"; return "这是严格模式。"; }
严格模式下要求
1.变量都必须先用var命令声明,然后再使用。
2.对动态绑定做了一些限制。某些情况下,只允许静态绑定。
属性和方法到底归属哪个对象,在编译阶段就确定。这样做有利于编译效率的提高,也使得代码更容易阅读,更少出现意外。
(1)禁止使用with语句
(2)创设eval作用域
3.增强了安全措施
(1)禁止this关键字指向全局对象
function f(){ return !this; } // 返回false,因为"this"指向全局对象,"!this"就是false function f(){ "use strict"; return !this; } // 返回true,因为严格模式下,this的值为undefined,所以"!this"为true。
(2)禁止在函数内部遍历调用栈
4.禁止删除变量:只有configurable设置为true的对象属性,才能被删除。
5.显示报错:
对一个对象的只读属性进行赋值会报错。
对禁止扩展的对象添加新属性,会报错。
删除一个不可删除的属性,会报错。
6.重名错误
(1)对象不能有重名的属性
(2)函数不能有重名的参数
7.禁止八进制表示法:不像正常模式整数的第一位如果是0,表示这是八进制数,会报错。
8.arguments对象的限制
(1)不允许对arguments赋值
(2)arguments不再追踪参数的变化
(3)禁止使用arguments.callee
9.函数必须声明在顶层:只允许在全局作用域或函数作用域的顶层声明函数,不允许在非函数的代码块内声明函数。
10.新增一些保留字:implements, interface, let, package, private, protected, public, static, yield。
整理自 javascript严格模式讲解