这次的主题是,具体的库和抽象的思路。

当看到Deferred这个区块时,觉得jQuery代码设计挺复杂,得用许多脑力才能看明白。

可是把这个峰回路转十八回的代码看懂又如何,是为了使用过程中出现bug后,容易调试吗?还是重新造个轮子?

我觉得需求撑大的库,当你不知道它撑大的历史,而贸然阅读,容易一头雾水。

所以从简单的具体开始,

1.没有参数传递,只有第一个函数有定时器的情况

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>没有参数传递,只有第一个函数有定时器的情况</title>
<script type="text/javascript">
var dfd = {};
dfd.resolve = function() {
var list = dfd.promise.list;
for(var i=0, l= list.length; i < l ; i++){
list[i]();
}
}
dfd.promise = {};
dfd.promise.list = [];
dfd.promise.then = function(fn_arg) {
dfd.promise.list.push(fn_arg);
return dfd.promise;
} function f1() { setTimeout(function() {
console.log("1");
dfd.resolve();
}, 1000); return dfd.promise;
} function f2(){
console.log("2");
}
function f3(){
console.log("3");
}
f1().then(f2).then(f3); </script>
</head>
<body>
没有参数传递,只有第一个函数有定时器的情况
</body>
</html>

2.没有参数传递,都有定时器的情况

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>没有参数传递,都有定时器的情况</title>
<script type="text/javascript">
var dfd = {};
dfd.resolve = function() {
var list = dfd.promise.list;
list.shift()();
}
dfd.promise = {};
dfd.promise.list = [];
dfd.promise.then = function(fn_arg) {
dfd.promise.list.push(fn_arg);
return dfd.promise;
} function f1() { setTimeout(function() {
console.log("1");
dfd.resolve();
}, 1000); return dfd.promise;
} function f2(){
setTimeout(function() {
console.log("2");
dfd.resolve();
}, 1000);
return dfd.promise;
} function f3(){
setTimeout(function() {
console.log("3");
}, 1000);
}
f1().then(f2).then(f3); </script>
</head>
<body> </body>
</html>

3.都有参数传递,都有定时器的情况

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>都有参数传递,都有定时器的情况</title>
<script type="text/javascript">
var dfd = {};
dfd.resolve = function(arg) {
var list = dfd.promise.list;
list.shift()(arg);
}
dfd.promise = {};
dfd.promise.list = [];
dfd.promise.then = function(fn_arg) {
dfd.promise.list.push(fn_arg);
return dfd.promise;
} function f1() { setTimeout(function() {
console.log("3");
dfd.resolve(5);
}, 1000); return dfd.promise;
} function f2(num){
setTimeout(function() {
console.log(num);
dfd.resolve(7);
}, 1000);
return dfd.promise;
} function f3(num){
setTimeout(function() {
console.log(num);
}, 1000);
}
f1().then(f2).then(f3); </script>
</head>
<body> </body>
</html>

至于库的演变过程,你想靠svn,git的提交记录知道,是不大可能。

除非造库的那个人,手把手教你从头开始打造这个库。

或者,每次库的重要变化时,他都用视频记录下来,并且以教程的方式展示。

我觉得,可以适当改变这种以行的方式来敲代码,改为以帧的方式来画代码。

这样,你才能清晰地看到,库的从无到有。

具体的库对外开放api,你只要知道这些个api用来干什么,就可以使用了。

方便是方便,但用多了,唯恐不知道其原理。

如果你知道其原理,然后再依据需求(如同营养),一步一步使库枝繁叶茂。

那么,拈花飞叶,便可伤人。

读jQuery源码有感3的更多相关文章

  1. 读jQuery源码有感

    读之前的预备工作: 1.基础的js知识,以及html和css知识,和正则表达式知识.可以参考妙味课堂的基础js,html和css大纲. 2.JavaScript核心指南的知识http://www.cn ...

  2. 读jQuery源码有感2

    那么就来读读jQuery源码的Callbacks部分. 一上来看原版源码 jQuery.Callbacks = function( options ) { // Convert options fro ...

  3. 【读jQuery源码有感系列一】callee

    <script type="text/javascript"> /*调用自身*/ function calleeDemo() { try{ } catch (error ...

  4. 读jQuery源码 - Deferred

    Deferred首次出现在jQuery 1.5中,在jQuery 1.8之后被改写,它的出现抹平了javascript中的大量回调产生的金字塔,提供了异步编程的能力,它主要服役于jQuery.ajax ...

  5. 读jQuery源码之整体框架分析

    读一个开源框架,大家最想学到的就是设计的思想和实现的技巧.最近读jQuery源码,记下我对大师作品的理解和心得,跟大家分享,权当抛砖引玉. 先附上jQuery的代码结构. (function(){ / ...

  6. 【读fastclick源码有感】彻底解决tap“点透”,提升移动端点击响应速度

    申明!!!最后发现判断有误,各位读读就好,正在研究中.....尼玛水太深了 前言 近期使用tap事件为老夫带来了这样那样的问题,其中一个问题是解决了点透还需要将原来一个个click变为tap,这样的话 ...

  7. 读jQuery源码 - Callbacks

    代码的本质突出顺序.有序这一概念,尤其在javascript——毕竟javascript是单线程引擎. javascript拥有函数式编程的特性,而又因为javascript单线程引擎,我们的函数总是 ...

  8. 读jQuery源码释疑笔记2

    本释疑笔记是针对自己在看源码的过程中遇到的一些问题的解答,对大众可能不具有参考性,不过可以看看有没有你也不懂得地方,相互学习,相互进步. 1.函数init <div id="one&q ...

  9. 读jQuery源码释疑笔记

    本释疑笔记是针对自己在看源码的过程中遇到的一些问题的解答,对大众可能不具有参考性,不过可以看看有没有你也不懂得地方,相互学习,相互进步.  1.each的用法 之前对each的用法一直迷迷糊糊,这次终 ...

随机推荐

  1. linux设备驱动归纳总结(四):5.多处理器下的竞态和并发【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-67673.html linux设备驱动归纳总结(四):5.多处理器下的竞态和并发 xxxxxxxxxx ...

  2. PHP用substr截取字符串出现中文乱码问题用mb_substr

    PHP用substr截取字符串出现中文乱码问题用mb_substr实例:mb_substr('截取中文乱码问题测试',0,5, 'utf-8'); 语法 : string substr (string ...

  3. spring.xml命名空间

    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w ...

  4. 为什么你要拒绝我 ——苹果AppStore被拒理由大全

    简而言之 截图中出现了Android 截图中出现了hack苹果的内容 评论中出现了"屌丝"等不雅词汇 App中包含谈论Android系统的内容 你修改了状态栏,不行 只有第三方登录 ...

  5. Docker centos 安装syslog

    在通常的Linux服务器中,有一些服务本身没有日志,只能通过 tail -f /var/log/messages来查看其运行日志,比如nrpe server.但是,如果想在docker容器中实现这个功 ...

  6. Linux CentOS 6.5 yum安装MongoDB的操作

    安装MongoDB的方法有很多种,可以源代码安装,在CentOS也可以用yum源安装的方法.由于MongoDB更新得比较快,我比较喜欢用yum源安装的方法.64位CentOS下的安装步骤如下: 1.准 ...

  7. log4j里面的info,debug,error级别有什么区别

    一共分为五个级别:DEBUG.INFO.WARN.ERROR和FATAL.这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL,明白这一 ...

  8. WMsg参数常量值

    //WMsg参数常量值: //创建一个窗口 const int WM_CREATE = 0x01; //当一个窗口被破坏时发送 const int WM_DESTROY = 0x02; //移动一个窗 ...

  9. android基础小结

    (注:此小结文档在全屏模式下观看效果最佳) 2016年3月1日,正式开始了我的android学习之路. 最最开始的,当然是学习怎样搭载环境了,然而苦逼的我在win10各种坑爹的指引下还是安装了一个星期 ...

  10. sql 2000以及2005以上获取数据库中所有的表(不包括系统表)

    ---------------------------------------------------------------------------- --sql 2005以上数据库 --- 获取数 ...