天天看点

从零开始阅读vue源码 -1- 由module和export引发的思考和学习

学习Vue,不光要学习它的用法,也要学习他的精髓。

学习Vue精髓,最直接的方法就是阅读源码。

阅读源码,理解源码的含义。

仰望星空,脚踏实地。

下面这段代码引用自Vue.js v2.6.11。

​
(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined' ? 
      module.exports = factory() 
      :
      typeof define === 'function' && define.amd  ? 
          define(factory) 
          :
          (global = global || self, global.Vue = factory());

}(this, function () { 'use strict';

    //此处省略一万行。。。

}));

​
           

整体结构是立即执行函数。

带两个参数,一个global用作全局变量存放,一个factory工厂函数制造一些初始化方法。

typeof判断变量类型,以此校验执行环境

需要理解逻辑运算符之间的优先级,

其中用到了几个不理解的变量,属性和方法,分别是 module、module.exports、define、define.amd

1,立即执行函数

故名思义,函数在定义完之后立即调用,这样的一种执行方式。

和C不同的是,js解析这个立即执行函数需要用()包起来,

(因为js解析function时默认把句首的function解读成语句而不是表达式)

作用:

  1. 隔离作用域,
  2. 封装变量,
  3.  不必命名函数而污染全局变量。

2,逻辑运算符之间的优先级

优先级看这篇就够了,|| > && >三目 写的很清楚。

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

顺便回忆一下短路原则

3,module、module.exports、define、define.amd的理解

通过下面的AMD(异步模块定义)中文规范可以很容易理解define、define.amd

https://github.com/amdjs/amdjs-api/wiki/AMD-(中文版)

module、module.exports关系:一句规范中的代码的理解:var module = module.exports;

以上个人理解,如有错漏请指正,虚心求教。