2009年12月,ECMAscript发布ECMAscript 5,一个版本的ECMAscript 3标准的距离已经颁布了十年,其间Javascript虽然在web编程,ECMAscript 4是最后因为这个语言的主要制造商的利益相关者和组织的复杂性(即,是否增加特征数扩展ECMAscript的功能)。死亡率的差异,使得新标准ECMAscript的发展明显落后于编程practice.ecmascript 5不那么雄心勃勃的目标。而不是添加JSON和反射更全面的控制更多的支持,一个重要的改进是引入严格的模式。在这种模式下,ECMAscript的语法变得更加严格,使原来的一些常见故障代码是不允许的,包括强制变量声明和不允许声明。该模型很简单,只需添加使用严格的脚本文件或函数的第一行;这样的字符串可以。

我知道在2010后,也写了一篇文章讨论了与关键字的缺陷,并附有以下内容。
楔

很久以前,神奇的故乡是为了纪念他,以他命名的一条街道。马亮没有拒绝,而是四个字的忠告。多年后,一个外来者来到这里,拦住了一个当地人问公路上的路。

请问这是上帝路吗

是的,这是上帝之路。

你不知道吗

我是这个人,怎么会不知道。

这是上帝之路吗

你知道该问什么。

我只是不知道这是一条上帝之路。

我不是告诉过你这是一条神道吗

你能再说一遍这是上帝之路吗

......

在这之后,当地人想起了魔术的评论,突然看到了光明。马亮说,并不是指。

一个问题

有一天,汤姆对Wang Er说,他的中国朋友,我有一个梦想。我想在中央电视台展示自己,第二天汤姆闯入一家邻居的商店。警方没有花太多时间来辨认和逮捕汤姆,因为他被商店的闭路电视拍摄得很清楚。

问题是当汤姆说出他的梦想时,他是

A)雄心勃勃的B(没有雄心勃勃的C)模棱两可的D)毫不含糊

正确的答案是B)和C)。
文本

上述两个古老的和现代的例子表明,缩写有时会造成歧义,它也存在于Javascript中,有时重复一个长名称的变量是非常麻烦的,例如:

objectwithlongname1 propty1 = value;

objectwithlongname1。propty2 = value2;

objectwithlongname1 propty3 =值;

objectwithlongname1.method1();

但是一个清楚的名字对于程序的可读性是很重要的:
复制代码代码如下所示:
与(objectwithlongname1){

propty1 =值1;

propty2 = value2;

propty3 =值;

方法();

}

这样可以节省大量的Kung Fu键盘,程序的结构也更加清晰。我们怎么知道在大括号中的名字,这是objectwithlongname1的属性和方法,这是外部变量和函数的解析规则的Javascript是第一objectwithlongname1上找到这些名字的属性,如果找不到它们,它们是外部变量。这是代码描述。
复制代码代码如下所示:
如果(objectwithlongname1.property1!=未定义的){

如果(objectwithlongname1.value1!=未定义的){

objectwithlongname1。属性= objectwithlongname1.value1; / / 5月1日

其他{ }

objectwithlongname1。属性= value1; / / 5月2日

}

其他{ }

如果(objectwithlongname1.value1!=未定义的){

属性= objectwithlongname1.value1; / / 5月3日

其他{ }

属性= value1; / / 5月4日

}

}

我们想要的是四种可能性之一,但其中之一是不小心,程序的执行将是另一种可能。此外,这样的编写对于程序的读者来说是非常困难的。另一方面,对于Javascript解释器,这种不确定性也影响到语言的性能。

其实,只要小的改进,就可以去掉这些缺陷。我们可以在前面的对象和属性中省略,所以在属性和外部变量之间有一个直观的区别,还有很多其他的语言都是这样做的:
复制代码代码如下所示:
与(objectwithlongname1){

propty1 = value;

propty2 = value2;

propty3 =值;

方法();

}

在Javascript进行这种改进之前,这两个元素有权轻松使用,并尽量避免使用语句,我们仍然可以使用一些变量方法。
复制代码代码如下所示:
VaR O1 = objectwithlongname1;

propty1 = value1 O1;

O1。propty2 = value2;

O1 propty3 =值;

o1.method1();

或是这种情况:

objectwithlongname1 propty1 = objectwithlongname2.propty1;

objectwithlongname1 propty2 = objectwithlongname2.propty2;

......

objectwithlongname1 propty10 = objectwithlongname2.propty10;

它可以写成:
复制代码代码如下所示:
(功能(O1,O2,PL){

pl.foreach(功能(项目){ } = { {项O1 O2项目};});

})(objectwithlongname1,objectwithlongname2,{ 'propty1 ',' propty2 ',…propty10};