字面量

字面量定义绝对是javascript的精华,

  • 简单, 直白,
  • 没有副作用和二义性.
  • 并且避免了各种继承和复杂关系.

调度

简单就是好, node的任务调度堪称完美.

  • 任务栈
  • 单线程
  • 异步

包(库)管理和框架

  1. 库是好的, 因为他并没有改变某个语言的语法结构, 在这点上, c++的设计理念很合理.
  2. 框架, 一般情况, 能不用就别用了, 一般都会很严重的改编一个语言. java除外, 因为java原生语法实在是太唠叨了, 因此, java框架大行其道.
  • js的包管理勉强还算不错. 勉强的意思是, 国内要用cnpm才行.

  • 但是, 包的依赖管理和引入机制真的是精华.

    • 直接引入为一个实例,
    • 也就是说是库的引入的概念, 而不是框架的概念.
    • 一般的包都完全不会改变现有任何代码的含义以及语法.
  • 一般情况下很难造成冲突, 只有特殊写法才会造成包冲突, 请看示例:

    //一般引入包, 都会直接引入为一个实例, 也就是说是库的引入的概念, 而不是框架的概念. 一般的包都完全不会改变现有任何代码的含义以及语法.
    var request = require('request') //引入了, http处理库request
    var fs = require('graceful-fs') //引入了file处理库
    fs.appendFile("./log/tes" , function(err) {});//这样使用, 看到了吗? 库对所有其他的代码都没有任何影响.
    request.get(url,  { "qs": "restring" },	httpr)//httpr是个回调函数.
    
    //那么也就是说, 大家各用各的包, 就算是我的项目和我引入的包, 都依赖于同一个包的不同版本, 那么也没有一毛钱关系.
    
  • 如果要想造成冲突, 那么, 唯有一种写法, 就是用prototype来做事, 所以这里引入了一个原则:

    • 尽量别用prototype.
  • 乱定义全局变量也会造成冲突. prototype+全局变量这就是老式框架的问题(比如jquery)

javascript和perl走的是同样的路

代码怎么写都可以. 但是, 某些写法会有很多问题. 大家一试就知道了, 然后, 很快就能形成一套合理的范式.

  1. 尽量用字面量, 而不是new一个对象.
  2. 尽量用字面量, 而不是prototype.
  3. 成员(变量/函数)用点或者中括号(引用)都可以. 一般用中括号代表你要动态决定成员.
  4. js和perl一样, 如果用了特殊的技巧, 那么一定要写详细明确的注释, 否则, 过些日子, 自己都看不懂.