Yan He

He is a Recreator

Page 10


第五章.闭包 (5.Closing in on closures)[完成]

这章写得极为精彩,让我明白了好多以前根本不知道的概念。

闭包是一个神奇的东西,新果说过,闭包就是可以当作鞭子来用,可以打出鞭子头一样的力道。

所谓的函数化这个概念中,闭包是一个很重要并且很精髓的概念。

想要理解函数化编程,就要深刻的理解闭包。

本章重点:

1.闭包的定义,闭包是什么,闭包如何工作

2.利用闭包来实现一些简单的开发

3.利用闭包实现性能上的增强

4.利用闭包实现私有域

5.1 闭包如何工作(How closures work)

问:闭包是什么?

答:简单来说,closure是一块域,这块域是由创建一个function而来,这个function可以访问和操作它的外部的变量

(Simply put, a closure is the scope created when a function is declared that allows the function to access and manipulate variables that are external to that function.)

这个概念最好还是用代码来解释,所以让我们看看5.1这个例子:

Listing 5.1: A simple closuer

var outerValue = 'ninja';  
function outerFunction(){  
    assert(outerValue == 'ninja', "I can see the ninja")  
}  
outerFunction(); 

你可能写过n多次这样的代码,可你竟然没有意识到你在创建闭包(closure)!

你不相信?估计是因为你没有感觉到有任何的惊喜。

因为out value和outer function的作用域是全局域(global scope),而全局域是永远不会消失(自从这个页面被加载就存在了),

另外就算是这个function可以访问outer value,这个特点也没有实用的价值。

所以就算closure已经存在了,它的用处也不明显。

让我们给他加上一点...

Continue reading →


第四章.挥舞函数(4.Wielding functions)[完成]

翻译 Secrets of the JavaScript Ninja (JavaScript忍者禁术)

第四章.挥舞函数(4.Wielding functions)

本章重点:

1.为什么匿名函数如此重要

2.函数中的递归

3.函数可以被引用后再调用

4.如何为函数缓存索引

5.利用函数的能力来实现记忆

6.利用函数上下文

7.处理参数长度

8.判断一个对象是否为函数

在上一章我们了解到函数作为自然类型的对象(first-order objects),并且了解到什么是函数式编程。在本章,我们会利用函数来解决一些问题,也许以后做web开发时候可以用到。

我们展示的例子并不会直接解决你开发中的问题,那岂不成了另一个什么指南之类的书了。

我们知道,本书的本质目的是让你能够真正的了解这门语言的精髓。

4.1 匿名函数(Anonymous functions)

不知道你是否已经熟悉了匿名函数,匿名函数的确是一个十分重要的概念需要我们来理解,如果你还在为JavaScript的忍者头巾而奋斗。他们是是否重要的特点,并且是一个函数化语言的灵魂,例如Scheme

匿名函数通常会被用于后续使用,例如存储一个变量,作为一个对象的方法,用于回调函数(例如timeout或者事件处理)

Listing 4.1: Common examples of using anonymous functions  
window.onload= function(){ assert(true, 'power!');};  
var ninja = {  
    shout: function(){  
        assert(true, "Ninja");  
    }  
}  
ninja.shout();  

setTimeout(function(){ assert(true, 'Forever!')}, 500)

我们将会在本书的后面看到大量的匿名函数,因为是否能将JavaScript使用的很有力量,取决于你是否将它作为...

Continue reading →


第三章.函数是根基(3.Functions are fundamental)[完成]

翻译 Secrets of the JavaScript Ninja (JavaScript忍者禁术)

第三章 函数是根基(3.Functions are fundamental)

本章重点:

1.为什么能够理解函数是如此的重要

2.为什么函数是基本类型对象(first-class objects)

3.函数如何被浏览器调用

4.函数的声明(Delaring functions)

5.函数被调用的秘密

6.函数上下文(The context within a function)

目录链接:http://yannhe.com/secrets-of-the-javascript-ninja-javascript
本文链接:http://yannhe.com/3-functions-are-fundamental
你可能感到很惊讶,为什么当我们讨论JavaScript的根基时是要讨论函数而非对象。

我们当然会关心对象(第六章会针对object),但是前提是讨论一些对象的实质问题。

当我们写JavaScript代码的时候,代码写成什么水平,是写成了平均水平,还是写成了JavaScript忍者水平。

就是取决于你是否真正理解了JavaScript是一门函数式语言(很重要的一语话)

你的水平就是取决于这个认知。

如果你在读本书,你一定不是一个初学者,我们会认为你是拥有很丰富的面向对象的开发经验(当然我们也会在第六争详细的讨论对象的高级概念),

但是真正的理解函数在JavaScript中的意义,是唯一的一件我们可以挥舞的重要武器。

由于函数如此之重要,我们接下来的会花另外两个章节来深入讨论函数在JavaScript中的意义。

值得注意是,在JavaScript中,函数是自然类型的对象(first-class objects)。

这就意味着:

1.函数可以被视为普通对象,就像其他数据的类型一样。

2.函数可以被赋值给任何变量,也可以被声明,还有可以被视为另一个函数的参数。

3.1 函数的独特之处是什么?

3.1.1 为什么JavaScrpit的函数式如此重要?

...

Continue reading →


第二章.测试和debug(2.Testing and debugging)[完成]

翻译 Secrets of the JavaScript Ninja (JavaScript忍者禁术)

第二章 测试和debug(Testing and debugging)

本章重点:
1.测试工具

2.测试技术

3.构建一个测试框架

4.如何测试异步代码

目录链接:http://yannhe.com/secrets-of-the-javascript-ninja-javascript

本文链接:http://yannhe.com/2-testing-and-debugging

由于我们在之后的示例中用到的测试工具很少,几乎就是在用assert函数,所以本章不做详细的翻译了。

首先将assert函数给出,之后的章节用的的assert函数都是在调用此段代码,用的时候请引用下面的assert.js:

(function()  
{  
    document.write("<style>results li.pass { color: green;}results li.fail { color: red;}</style>");  
    document.write("<ul id='results'></ul>");  
    var results;  
    this.assert = function assert(value, desc)  
    {  
        results = results || document.getElementById("results");  
        var li = document.createElement('li');  
        li.className = value ? "pass" : "fail";  
        li.appendChild(document.createTextNode(desc));  
        results.appendChild(li);  
        if (!value)
...

Continue reading →


第一章.进入忍者的世界(1.Enter the ninja)[完成]

翻译 Secrets of the JavaScript Ninja (JavaScript忍者禁术)

第一章 进入忍者的世界(1.Enter the ninja)

本章重点:

1.介绍本书的目的和结构

2.我们将要关注的类库,我们将要讲解的比较cool的亮点都会在这些类库中找到具体的实现。

3.什么是JavaScript的高级编程(世界级的开发者用什么方式来编写JavaScript)

4.什么是跨浏览器编程

5.展示测试组件(如何测试你的代码)

目录链接:http://yannhe.com/secrets-of-the-javascript-ninja-javascript

本文链接:http://yannhe.com/1-enter-the-ninja

如果你在阅读本书,你一定使用过JavaScript,你一定会感到编写有效并且可以跨浏览器的JavaScript代码并不轻松。

我们的挑战,除了要写出干净的代码,还要考虑不同浏览器之间的差异。

为了可以解决这些复杂问题,我们想到将可重用的功能以类库的形式实现。

这些类库,虽然彼此之间很不同,但是他们的统一原则是:

它们要很容易的被使用,构建的开支要尽量的小,并且可以在所有的浏览器中正常运行。

通过分析这些类库的构造,我们可以学习到很多非常牛逼的经验,如果你可以学以致用,你一样可以构建出同样牛逼的代码。

本书将那些世界级的大牛写的代码融合在一起,目的就是想为你开启探索JavaScript精髓的大门。

1.1 JavaScript类库

在本书中,到处都是一些有趣的技术和代码示例,目的是想通过这些技术和示例让你体会到其背后的思想和理念。

那些世界级的类库,正是基于这些思想构建和理念构建而成。

它们是:

·Prototype(http://prototypejs.org/):2005年由现代JavaScript库教父Sam Stephenson创建并发布的。封装了DOM,Ajax和event事件功能,此外还有涉及到面向对象编程技术、面向方面编程技术和函数式编程技术。

...

Continue reading →


翻译 Secrets of the JavaScript Ninja (JavaScript忍者禁术)

jsninja.jpg

原书: Secrets of the JavaScript Ninja

作者: John Resig

译者: Yann(yannhe.com)

GitHub: (github.com/yannhack/jsninja)

第一阶段:准备阶段

1.进入忍者的世界(Enter the ninja) [完成]

2.测试和debug(Testing and debugging)[完成]]

第二阶段:学徒阶段

3.函数是根基(Functions are fundamental)[完成]

4.挥舞函数(Wielding functions)[完成]

5.闭包 (Closing in on closures)[完成]

6.原型与面向对象(Object-orientation with prototypes)[完成]

第三阶段:忍者阶段

第四阶段:大师阶段

(转载本文章请注明作者和出处 Yann (yannhe.com),请勿用于任何商业用途)

Continue reading →


2014 Year

现在我30岁,工作快7年了。
这么多年在技术层面没有真正静下心来去专研,
心里总感觉没底,不踏实,不舒服。

究其原因当然是自己的功利主义,
觉得学习技术了也没有直接的效果,工作中也用不到。

现在我醒悟过来,不应该抱着这样的态度生活。
生活应该是有乐趣的,专注的。
我应该沉浸在技术的世界里面,
不要再想,现在做的这事有用还是没用。
乐趣是唯一的目的。

所以2014年我要改变。
虽然到了这个年龄再去改变有些晚,
虽然改变了也不能怎样,但是不改变又能怎样。
我要看看1年后我的变化有多大。

2014年的改变如下:

1.读技术书籍

我要深入的精读技术的书籍,今年的目标是JavaScript和C语言

2.写读书笔记

读完一本书如果不输出,就会忘记,所以我要将读过的好书,输出成文档

3.读英文书

学英语应该是一辈子的事情,不应该是短时间见成果的,放弃功利主义吧

4.看中国Geek的blog

5.看外国Geek的blog

要和世界接轨,看看人家都在做什么

6.每个周末找一天看书

每个周末找一天,去咖啡馆看书

View →