Skip to content

Commit 355d64c

Browse files
committed
small fix
1 parent 393e4ad commit 355d64c

File tree

1 file changed

+7
-11
lines changed

1 file changed

+7
-11
lines changed

chapters/JavaScript_Core/JavaScript_Basics/Strict_Mode.md

+7-11
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
> 本文上一个版本盗用了别人的文章,经读者指出后我就删掉了。由于起草的时间在去年,我也不太清楚当初是怎么把别人的文章复制进来的。本文除了介绍所谓的Strict Mode之外,还会介绍其他关联内容。
44
5-
JavaScript并不是一个完美的语言。事实上,第一个版本的Brendan Eich[^1]花费十天的时间创造的,你不能对它期望太多。之后,JavaScript在浏览器大战中,成为各方角逐的主要战场。各大厂商各显神通,其副作用是各种奇奇怪怪的行为和各式不一的API。在之后,W3C和其他社区团体花费了大量的精力来通过标准化来“净化”所有Web开发相关的技术标准。
5+
JavaScript并不是一个完美的语言。事实上,第一个版本是Brendan Eich[^1]花费十天的时间创造的,你不能对它期望太多。之后,JavaScript在浏览器大战中,成为各方角逐的主要战场。各大厂商各显神通,其副作用是各种奇奇怪怪的行为和各式不一的API。在之后,W3C和其他社区团体花费了大量的精力来通过标准化来“净化”所有Web开发相关的技术标准。
66

77
但尴尬的是,浏览器厂商并不是那么完全的实现了W3C和ECMAScript的各种标准。最后,经验丰富的Javascript程序员,通过约束自身对Javascript的使用方法,来达到让Javascript更高的可拥度。可能大部分人都读过《JavaScript语言精粹》[^2]这本书,其讲述的就是如何在JavaScript语言中,取其精华,然后去其糟粕。
88

@@ -56,7 +56,7 @@ function mySuckingMethod {
5656
```
5757
"use strict";
5858
var o = {};
59-
Object.defineProperty(o, "hello", {value:"world", wrtiable:false});
59+
Object.defineProperty(o, "hello", {value:"world", writable:false});
6060
o.hello = "bad boy";//throw
6161
```
6262

@@ -149,8 +149,7 @@ var evalHello = eval("'use strict'; var hello = "girl"; hello");
149149
### `arguments`不再追踪实际参数值变化
150150

151151
```
152-
function f(hello)
153-
{
152+
function f(hello) {
154153
"use strict";
155154
hello = "girl";
156155
return [hello, arguments[0]];
@@ -181,8 +180,7 @@ function fun() { return this; }
181180
以往,我们可以通过函数的`caller``arguments`来投影整个调用堆栈。但是,在严格模式中我们做不到。
182181

183182
```
184-
function restricted()
185-
{
183+
function restricted() {
186184
"use strict";
187185
restricted.caller; // throws a TypeError
188186
restricted.arguments; // throws a TypeError
@@ -202,8 +200,7 @@ implements, interface, let, package, private, protected, public, static, yield
202200
很多开发者喜欢如下代码风格,这在严格模式中会报错。
203201

204202
```
205-
function foo()
206-
{
203+
function foo() {
207204
"use strict";
208205
return g;
209206
function g() { }//throw SyntaxError
@@ -214,8 +211,7 @@ function foo()
214211

215212
```
216213
function g() { }
217-
function foo()
218-
{
214+
function foo() {
219215
if (true)
220216
function g() { }
221217
return g;
@@ -232,7 +228,7 @@ ES6 Draft中引入了一个新的概念[^5],叫`Extend Mode`,然后又被撤
232228

233229
这个模式是备受争议的。这个模式的产生,也体会出制作一个标准的困难之处——你总要考虑新标准对老标准的兼容,尤其是Web技术。
234230

235-
有稍微了解ES6的同学都应该清楚,`module``class`这些东西已经完全颠覆了传统JavaScript的很多尝试。但也有不少东西,开发者是可以接受,并立马去尝试的。于是乎,关于如何让代码部分进入`extended mode`也就成了最初讨论的重点[^7]
231+
有稍微了解ES6的同学都应该清楚,`module``class`这些东西已经完全颠覆了传统JavaScript的很多常识。但也有不少东西,开发者是可以接受,并立马去尝试的。于是乎,关于如何让代码部分进入`extended mode`也就成了最初讨论的重点[^7]
236232

237233
实际表现上,node的0.11.x的版本,有些特性,仅仅使用`--harmony`并不能完全使用,还需加上`--use_strict`。在这里,已经可以看出V8团队有多纠结了[^8]。他们也没有想清楚,该如何进入`extended mode`,索性,也叫`strict`吧。
238234

0 commit comments

Comments
 (0)