Mozilla的JavaScript引擎SpiderMonkey和Rhino很早开始引入了Strict模式,现在ES3.1规范草案将Strict模式进行了标准化。
在程序首或函数首使用Strict指令即可启用Strict模式。
废话不说,
翠花,上代码:
<script>
// 本段脚本启用了strict模式
use strict
function f() {
// strict模式代码中的函数也是strict的
try {
// strict模式代码中的eval也是strict的
eval('x = 1') // strict模式中对未声明过的x赋值会抛出异常,
// 而不会在global上创建x
} catch (e) {
new Function('x = 1')() // strict模式代码中的new Function
// 是non-strict的!
}
}
assert (window.x === undefined)
f()
assert (window.x === 1)
</script>
<script>
// 本段脚本是non-strict模式
function f1()
// 此函数是non-strict模式
// 此eval也是non-strict模式
eval('x = 1')
}
function f2() {
// 此函数启用了strict模式
use strict
// 此eval也是strict模式
eval('x = 1')
}
f3 = new Function('use strict; x = 1') // 也是strict模式
assert (window.x === undefined)
try { f2() } catch(e) {
try { f3() } catch(e) {
f1()
}}
assert (window.x === 1)
</script>
(注意,由于尚没有ES3.1的完整实现,所以以上代码只能远观,不可亵玩……)
除了变量都需声明外,strict模式的重要限制包括:
1. block中不能出现var定义,包括if、for、while、switch等结构中都不能有var定义!
2. eval中的var/function声明被局部化(类似Function构造器):
new function () {
eval('var x=1; alert(x);') // x is only accessible in the eval code
alert(x); // error
}
3. eval只能直接调用,任何间接调用(如eval.call)或试图将eval赋给其他变量,都会扔出EvalError。
4. 不能包含with语句!
5. 不能使用caller和arguments.callee属性!
6. 普通的函数调用中this是null,而不是global对象。
其他不太重要的改变包括:赋值、++和--操作等用于只读属性、不可扩展对象时,delete操作用于不可删属性时,可能会扔出TypeError;赋值、delete操作还可能会扔出ReferenceError。函数不能有同名参数;修改arguments[n]不会影响对应的具名参数,反过来也一样。
注:以上据ES3.1 2008年12月的草案。
分享到:
相关推荐
严格模式(Strict Mode)是ECMAScript 5的新特性,它允许你把整个程序,或者某个函数,放置在“严格”的操作语境中。这种严格的语境会防止某些特定的操作并抛出更多的异常。 虽然ECMAScript 5对ECMAScript 3是向下...
ECMAScript2021中文最新,ECMAScript2021中文文档,第1-6章,持续更新,喜欢请star。git地址https://github.com/fangniyima/ECMAScript-notes
ECMAscript基础
ECMAScript中的设计模式 英文| 在ECMAScript中实现的设计模式(GoF)。 代码示例原则: 极简主义 抽象的 指导 细节 :green_book: 创作模式 描述对象实例化方式的创建模式,并着重于类的实例化。 :green_heart: ...
2009年12月,...ECMAScript 5在目标上没有那么雄心勃勃,除去新增了对JSON的支持和反射的更全面的控制,一项重要改进就是引入“严格模式”(strict mode)。在此模式下,ECMAScript的语法变得更严格,使得原先
js 学习必备。 ECMAScript5.1中文版
这个 Ecma 标准定义了 ECMAScript 2020 语言。它是 ECMAScript 语言的第十一版 规范。自 1997 年第一版出版以来,ECMAScript 已经发展成为世界上使用最广泛的通用编程语言之一。它最广为人知的是嵌入在Web浏览器中的...
ECMAScript 6 入门(第三版)
Learning ECMAScript 6 Learning ECMAScript 6 Learning ECMAScript 6 Learning ECMAScript 6
此标准定义了 ECMAScript 脚本语言。本节包含对 ECMAScript 语言非规范性的概述。
ECMAScript Javascript Promise 详解
ecmascript手册,可以通过手册料及基于此规范的语言
ECMAScript 2018规范。 主要包含内容: 异步迭代器:原生支持在 JavaScript 中对异步获取的数据做迭代。 Object Rest/Spread Properties Promise.prototype.finally Template Literal(模板字面量):取消 ...
ECMAScript语言概述 ECMAScript对象概述(原型链Prototype Chain) ECMA-262主要术语 ECMAScript执行环境(作用域链Scope Chain,闭包机制) ECMAScript函数(new原理) ECMAScript内部属性(参考) ECMAScript执行环境作用...
Cherow一个用ECMAScript编写非常快速,符合标准的ECMAScript解析器
Understanding ECMAScript 6 中文版
ECMAScript全套(ECMAScript5,ECMAScript6,ECMAScript2018)
ECMAScript 2018快速入门
《ECMAScript 6 入门》是一本开源的 JavaScript 语言教程,全面介绍 ECMAScript 6 新引入的语法特性。 本书覆盖 ES6 与上一个版本 ES5 的所有不同之处,对涉及的语法知识给予详细介绍,并给出大量简洁易懂的示例代码...