HackerTube English?

JavaScript: The Good Parts

Google TechTalksYouTube ↗

延伸阅读 1

字幕解读

Crockford 将 JavaScript 描述为兼具优秀构想和严重缺陷的语言,认为使用者应先理解其语义,只采用闭包、动态对象、原型继承等优点,并主动避开全局变量、隐式分号插入、类型强制转换等陷阱。他演示了用闭包封装私有状态,并介绍 JSLint 作为动态语言中的纪律工具。演讲也谈到标准演进、严格模式、对象加固与安全子集。

英文字幕轨道 · 引文按字幕原文展示,可点时间戳回看片段。

内容要点

  • 语言的外观容易让其他语言的程序员误以为 JavaScript 行为熟悉,正确做法是学习其实际语义。
  • 用闭包封装私有变量可以避免全局命名冲突,并创建有共享私有状态的方法对象。
  • 采用明确的代码约定和静态检查器(如演讲中的 JSLint),可以避开语言陷阱并提升动态代码的可靠性。
视频章节 6
  1. JavaScript 被误解且有好坏两面
  2. 常见抱怨与语言缺陷
  3. 闭包、对象与原型继承
  4. 用闭包封装私有状态
  5. 代码风格与自动分号陷阱
  6. JSLint 与避免错误习惯
具体观点与证据 4

闭包让返回的函数持续访问创建它时的局部环境,从而隐藏共享状态并避免反复初始化数组。

解释演讲中的digit_name示例;历史语言限制不代表当前JavaScript。

It will continue to enjoy access to them even after the outer function has returned.

分号插入、块语法、标签与无用表达式相互作用,可能把错误的return换行变成无警告的有效程序。

针对演讲具体return对象字面量示例。

all these things tend to work together to mask errors.

静态lint通过识别语言中易出错的用法,把动态语言中的编码纪律转化为可执行检查。

lint提高发现概率,不是程序正确性证明。

it imposes a programming discipline that makes me much more confident in being in this very dynamic, very loosely typed environment.

互操作标准应减少协作双方必须达成共识的内容;JSON的极简设计体现这种取舍。

讲者的标准设计原则,不意味着任何增加功能都错误。

the less we have to agree on in order to work together, the better.
补充字幕原文 2

演讲者认为 JavaScript 并非全盘不可用;关键是辨别并限定使用其良好部分。

use those parts exclusively and avoid the bad parts

为避免隐式类型强制转换造成意外相等判断,他建议始终使用严格相等运算符。

Always use a triple equal operator
解读边界

这是面向 JavaScript 3.1 时代的观点与建议;文中有关未来标准、浏览器实现和安全特性的陈述均处于当时的讨论背景。

Hacker News 评论

查看 HN 原评论 ↗