Eloquent Javascript

文章目录

    The art of programming is the skill of controlling complexity.

    在线阅读地址 Eloquent JavaScript 已更新至第二版

    降低使用复杂度

    var total = 0, count = 1; 
    while (count <= 10) {
        total += count;
        count += 1; 
    }
    print(total);
    

    如果通过自定义的 sum, range 组成,那么复杂度将大大降低。

    print(sum(range(1, 10)));
    

    大家更喜欢 Python 而不是 Javascript, 也就是因为 Python 可读性更好,而实际上这些
    都可以通过自定义的 js 函数来解决。

    所以,要熟练使用一门语言,并爱上这门语言,必然要做一些自己的封装。实际上,我们
    看 AngularJS 的源代码就能发现,许多的封装,例如 angular.forEach 就使 loop
    array 和 object 更加方便。Redis 的代码里同样能看到作者的大量封装,以符合自己的
    使用习惯。

    讨厌一样东西,有时候太武断

    看了作者的观点,我好惭愧。作者对 javascript 不便捷的地方做了大量的封装,而我只
    是一味的抱怨。所以,有时候我们在争论一项技术是否优于另一项时,显得有些武断,当
    我们认识到其缺陷时,为什么第一反应不是去完善他呢?哈哈

    为什么对 javascript 的第一印象就是丑陋

    如果我第一次看到的 javascript 代码都是 AngularJS 源代码那样的质量,我想我一定
    不会有 js 是一门丑陋的语言这种印象。说到底,丑陋跟语言无关,跟人有关。所以,学
    习高手的代码才是正道。

    选择入门书也很重要,例如这本书的作者就能瞬间提升你对 js 的兴趣,而不想其他教程
    让你不断体会到枯燥。

    如何写一个自己的 js module 使 js 写起来更顺手

    必然要有自己的 namespace, e.g. eloquent.range(10), 如何定义 namespace 才更顺手。

    尝试一:

    var eloquent = {
        version: "0.0.1",
        range: function(upto) {
            ...
        }
    };
    

    感觉 key, value 的方式好丑。。。且不方便区分私有函数和 public method。

    尝试二:

    var eloquent = new Object();
    
    eloquent.version = "0.0.1";
    
    eloquent.range = function(upto) {
        ...
    };
    

    也不方便在 namespace 中定义私有函数,且要不断加 eloquent 前缀,好麻烦。

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式