JavaScript:打破所有规则

412 查看

来源:紫云飞的博客,@紫云妃

来自Twitter的前端工程师Angus Croll,在柏林举办的JSConf会议上,进行了题为”Break all the Rulez“的演讲。主要讲了一些我们通常认为是错误的不该使用的东西,其实是有用的。Angus Croll 演讲用的讲稿(链接),远在美国的JavaScript之父看后也说同意其中大部分观点(看来还是有问题?)。

下面我把要点简单翻译一下,不做扩展解释.

JavaScript:打破所有规则

with语句

为什么不去使用它?

1.意外的运行结果,可能隐式创建全局变量

2.闭包作用域解析过多消耗

3.后期编译

有人说,ES5的严格模式可以防止隐式创建全局变量(不用var),这样能减少with的一个问题.但是…

严格模式也不能使用with啊.

为什么说它是有用的?

1.构建浏览器开发者工具

2.模拟块级作用域

eval语句

为什么不去使用它?

1.代码注入

2.无法进行闭包优化

3.后期编译

为什么说它是有用的?

1. JSON.parse不可用的时候

有人在Stack Overflow上说:

“JavaScript的eval是不安全的,使用json.org上的JSON解析器来解析JSON”

还有人说:

“不要使用eval来解析JSON!用道格拉斯写的json2.js!”

可是:

2.浏览器的JavaScript控制台都是用eval实现的

在Webkit控制台或JSBin中执行下面的代码