简述JavaScript严格模式(推荐使用此模式~)

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关键字。

本严格模式简述并不完整,且条理性不够,详情请参考链接资源,最后建议前端新手们尽量开始使用严格模式,不要问我为什么,开头已经说了严格模式的目的了哈,另外面试很可能被问到啊~~~

官方文档

阮一峰:Javascript 严格模式详解

你可能感兴趣的:(简述JavaScript严格模式(推荐使用此模式~))