小白和你慢慢读Zepto源码(一)

前言

作者是一以一个小白的视角(虽然自己真的是一个小白)去读和分析Zepto源码。作为一个真小白,总是学到一阵子就不知道自己还能朝什么方向进步。但凡这个时候要不是就膨胀的觉得自己什么都会,要么就是觉得很迷茫,作者也有过类似的经历。但是作者逐渐找到了读源码,分析源码的方式来发现自己对于一些知识点的不足,很多时候日常写代码,你只需要用一些很基本的语法就可以搞定,但是很多时候你就忽略了,有更优美,更简洁的表达方式和设计思想,这对一个程序员的进阶是十分必要的。有人会觉得这个大神写的框架根本看不懂,其实,可以从一些小的框架入手,逐步去揭开原理,你就会豁然开朗,本文源码版本Zepto v1.2.0。

分析(主要从整体到局部,解决疑问为导向)

有很多小白其实跟我一样,只听过JQuery没有听过Zepto,和我一开始也一样,Zepto简单来说就是移动端的JQuery保留了JQuery的核心功能,少了很多JQuery为了兼容各类浏览器的兼容代码,代码行数不多,但是都很精简。
首先是整个函数的启动方式:

(function (global, factory) {
  //这里是支持amd模式,require.js可以支持amd,amd里面define是一个function,同时为了确认defind不是自己定义的全局函数,
  //define.amd确认是amd协议
  if (typeof define === 'function' && define.amd)
    //支持define 异步加载模块的话就异步加载
    define(function () { return factory(global) })
  else
    //把this变量传入,等于是传入window
    factory(global)
}(this, function (window) {
}))

define是一个判定是不是AMD规范的函数,作为一只小白表示对此不懂,但是作为一只头很铁的小白决心一定要把这些东西搞清楚,于是我就开始查资料,发现了关于JS模块化存在几种规范,那模块化又是什么呢,其实呢,大家用过其他语言的就知道,像Java,Python,都可以通过一个模块引用另外一个模块的情况,但是之前大家都只是拿JS写一点网页效果,就不关心这些,就用script标签一个一个按照次序的引入,这样全部放在全局里面,现在大家觉得JS也要有模块化,也要工程化,那么我们就设计模块化协议,就又AMD协议CMD协议和CommandJS,其中AMD协议以define为关键字是一个异步引用的协议,CMD和CommandJS都是阻塞的协议。具体的AMD协议的使用方法,大家上网自行百度。
这一个块是一个IIFE,IIFE简单来说就是创建匿名函数完成就立即调用,这样防止全局污染,源码中,传入了一个this变量,this在全局里面指向调用对象也就是window,传入了全局对象,就可以把对象挂载在window上,就可以实现大家所看到的,$。

你可能感兴趣的:(小白和你慢慢读Zepto源码(一))