ECMAScript 5的严格模式是JavaScript中的一种限制性更强的变种方式。注意它并不是一个语法子集:它在语义上与正常代码有着明显的差异!!!严格模式在语义上与正常的JavaScript有一些不同。 首先,严格模式会将JavaScript陷阱直接变成明显的错误。其次,严格模式修正了一些引擎难以优化的错误:同样的代码有些时候严格模式会比非严格模式下更快。 第三,严格模式禁用了一些有可能在未来版本中定义的语法。
那如何启动该模式呢,两种方式:
(1)为某个script标签开启严格模式
为整个script标签开启严格模式, 需要在所有语句之前放一个特定语句"use strict"。
(2)为某个函数开启严格模式
为某个函数开启严格模式,需要把"use strict"(或'use strict';)声明放在函数体所有语句之前。
接着讲严格模式对语法有哪些限制呢?
(1)直接使用未声明变量将抛异常。
(2)禁止使用with语句。
(3)eval仅仅为被运行的代码创建变量,其不会影响到外部变量,比如
var x = 17;
eval("'use strict'; var x = 42; ");
alert(x === 17);//true
(4)当this的值为null或undefined时,该值不会转换为全局对象,比如
function testFunc( ) {
return this;
}
vartestvar = testFunc();//vartestvar为undefined
(5)fun.caller和fun.arguments不可用,比如
function f1(){
"use strict";
f1.caller; // 抛异常
f1.arguments; // 抛异常
}
f1();
(6)arguments.callee不可用,arguments不再追踪参数的变化,参数变化同时也不影响arguments。
(7)delete操作:删除变量,函数或参数,删除configurable特性设置为false的属性将抛异常。
(8)写入到只读属性,将属性添加到extensible属性设置为false的对象,对一个使用getter方法读取的属性进行赋值将抛异常。
(9)对象重名属性,方法重名参数将抛异常。
(10)禁止八进制表示法。
(11)函数必须声明在顶层,即不允许在非函数的代码块内声明函数。
(12)不能使用implements, interface, let, package, private, protected, public, static, yield关键字。
本严格模式简述并不完整,且条理性不够,详情请参考链接资源,最后建议前端新手们尽量开始使用严格模式,不要问我为什么,开头已经说了严格模式的目的了哈,另外面试很可能被问到啊~~~