天天看點

從零開始閱讀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;

以上個人了解,如有錯漏請指正,虛心求教。