Показать сообщение отдельно
  #1 (permalink)  
Старый 23.11.2018, 22:33
Новичок на форуме
Отправить личное сообщение для taksebe Посмотреть профиль Найти все сообщения от taksebe
 
Регистрация: 23.11.2018
Сообщений: 9

Просмотрела исходик jQuery Откорректируйте где не верно
Приветствую. Изучаю javascript и пытаюсь понять как работает jQuery. Прошу поправить мои комментарии к релизу версии 1.12. (из-за поддержки старых IE) в случае неверного истолкования.
jQuery JavaScript Library v1.12.4
Обозначения в комментариях:
-"Количество вызовов" = количество вызовов в других местах исходника
-"..." = см. исходник
Код значительно урезан с соблюдением исходной последовательности и синтаксиса, крупные блоки оставленные в оригинале если непрокомментированы
Исходный код
Разбиваю на несколько сообщений, целиком не пропускает
// 1. Мгновенно вызываемая функция (IIFE)
(function( global, factory ){определение модуля}(модуль))

// 1.1. Определение модуля
if ( typeof module === "object" && typeof module.exports === "object" ) { //... }

// 1.2. Модуль
typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
"use strict";

// Количество вызовов: 9
var deletedIds = [];

// Без комментариев
var document = window.document;
var slice = deletedIds.slice;
var concat = deletedIds.concat;
var push = deletedIds.push;
var indexOf = deletedIds.indexOf;

// Class2type карта. Количество вызовов: 4
var class2type = {};

// Количество вызовов: 2
var toString = class2type.toString;

// Количество вызовов: 6. У Sizzle своя переменная hasOwn
var hasOwn = class2type.hasOwnProperty;

/* Объект с информацией об особенностях текущего браузера. Количество вызовов: 74. У Sizzle своя переменная support */
var support = {};

var 
    // Количество вызовов: 2
    version = "1.12.4", 

    /* Основная функция. Функция-конструктор, создающая в памяти браузера копию (экземпляр)
    базового объекта - объект jQuery. Количество вызовов: 744 */
    jQuery = function( selector, context ){return new jQuery.fn.init( selector, context );},
    
    // Количество вызовов: 2. У Sizzle своя переменная rtrim
    rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,

    // Количество вызовов: 1
    rmsPrefix = /^-ms-/,
    rdashAlpha = /-([\da-z])/gi,

    // Камелизация. Количество вызовов: 1
    fcamelCase = function( all, letter ) { return letter.toUpperCase(); 	};

// Для освобождения памяти от дубликатов методов. Количество вызовов: 39
jQuery.fn = jQuery.prototype = { /* определение свойств экземпляра jQuery в свойстве prototype конструктора объекта jQuery */ };

// Количество вызовов: 30
jQuery.extend = jQuery.fn.extend = function() { /* функция extend() - реализация extends (JS), наследование */ };

jQuery.extend( { /* добавление следующих свойств в объект jQuery: expando, isReady, error, noop, isFunction, isArray, isWindow, isNumeric, 

isEmptyObject, isPlainObject, type, globalEval, camelCase, nodeName, each, trim, makeArray, inArray, merge, grep, map, guid, proxy, now, 

support */ } );

// Анализатор кода JSHint
/* jshint ignore: start */
if ( typeof Symbol === "function" ) {
  jQuery.fn[ Symbol.iterator ] = deletedIds[ Symbol.iterator ];
}
/* jshint ignore: end */

// Заполнение class2type карты
jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
function( i, name ) { class2type[ "[object " + name + "]" ] = name.toLowerCase(); } );

// Функция, определяющая является ли объект массивом. Количество вызовов: 3
function isArrayLike( obj ) { //... }

// Количество вызовов: 6, не включая Sizzle.js
var Sizzle = (function( window ) { /* Sizzle - кросс-браузерный движок селекторов */ })( window );

// Количество вызовов: 10
jQuery.find = Sizzle;

// Количество вызовов: 12 
jQuery.expr = Sizzle.selectors;

// Количество вызовов: 0 
jQuery.expr[ ":" ] = jQuery.expr.pseudos;

// Количество вызовов: 3
jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;

// Количество вызовов: 2
jQuery.text = Sizzle.getText;

// Количество вызовов: 4
jQuery.isXMLDoc = Sizzle.isXML;

// Количество вызовов: 12
jQuery.contains = Sizzle.contains;

// Функция проверки dir()-проверка на наличие в результатах иных элементов, кроме DOM
Количество вызовов: 6. У Sizzle своя переменная dir
var dir = function( elem, dir, until ) { //... };

// Функция выбора потомков siblings(). Количество вызовов: 2
var siblings = function( n, elem ) { //... };

// Количество вызовов: 2
var rneedsContext = jQuery.expr.match.needsContext;
var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ );

// Количество вызовов: 1
var risSimple = /^.[^:#\[\.,]*$/;

// Количество вызовов: 3
function winnow( elements, qualifier, not ) { /* функция-фильтр winnow() - реализация js-функции filter() */ }

// Количество вызовов: 4
jQuery.filter = function( expr, elems, not ) { /* метод .filter()-реализация js-функции filter() */ };

jQuery.fn.extend( { /* добавление следующих свойств в экземпляр jQuery: find, filter, not, is */ } );

// Главная ссылка на корневой jQuery(document). Количество вызовов: 3
var rootjQuery,

    // Проверка HTML строк. Количество вызовов: 3
    rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,

    // Количество вызовов: 5
    init = jQuery.fn.init = function( selector, context, root ) { /* функция init() */ };

// Придание функции init свойства prototype конструктора объекта jQuery для последующего создания экземпляра. Количество вызовов: 1
init.prototype = jQuery.fn;

// Инициализация главной ссылки
rootjQuery = jQuery( document );

// Количество вызовов: 1
var rparentsprev = /^(?:parents|prev(?:Until|All))/,
    
    // Методы jQuery, гарантирующие создание уникального набора. Количество вызовов: 1
    guaranteedUnique = {
      children: true,
      contents: true,
      next: true,
      prev: true
    };

jQuery.fn.extend( { /* добавление следующих свойств в экземпляр jQuery: has, closest, index, add, addBack */ } );

// Функция выборки потомков sibling(). Количество вызовов: 2
function sibling( cur, dir ) { //... }

// Количество вызовов: 29
jQuery.each( { /* перебирающая функция jQuery.each() */ };

// Количество вызовов: 10
var rnotwhite = ( /\S+/g );

/* Функция преобразования строчно-отформатированных опций в объектно-отформатированные.
Количество вызовов: 1 */
function createOptions( options ) { //... }

// Количество вызовов: 5
jQuery.Callbacks = function( options ) { функция jQuery.Callbacks() }

jQuery.extend( { /* добавление следующих свойств в объект jQuery: Deferred, when(Deferred helper) */ } );

// Deferred, используемая в DOM, готовность. Количество вызовов: 4
var readyList;

// Количество вызовов: 0
jQuery.fn.ready = function( fn ) {
  // Добавление функции обратного вызова
  jQuery.ready.promise().done( fn );
  return this;
};

jQuery.extend( { /* добавление следующих свойств в объект jQuery: readyWait, holdReady, ready */ } );

// Функция очистки для готовых событий DOM. Количество вызовов: 0
function detach() { //... }

// Обработчик готовых событий. Количество вызовов: 0
function completed() { //... }

// Количество вызовов: 2
jQuery.ready.promise = function( obj ) { /* jQuery.ready.promise() - метод самоочистки */ };

// Удаляем проверку готовности DOM даже если пользователь этого не делал
jQuery.ready.promise();

// Повторение свыше унаследованных свойств объекта вплоть до его собственных
var i;
for ( i in jQuery( support ) ) { break; }
support.ownFirst = i === "0";

/* Примечание: Большинство тестов поддержки определены в их соответствующих модулях. False до запуска теста. Количество вызовов: 2 */
support.inlineBlockNeedsLayout = false;

jQuery( function() { /* исполнение «как можно скорее» в случае если нужно установить body.style.zoom */ } );

( function() {
  var div = document.createElement( "div" );
  // Support: IE<9
  support.deleteExpando = true;
  try {
    delete div.test;
  } catch ( e ) {
    support.deleteExpando = false;
  }
  // Null elements to avoid leaks in IE.
  div = null;
} )();

// Проверка данных. Количество вызовов: 5
var acceptData = function( elem ) { //... };

// Количество вызовов: 1
var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
    rmultiDash = /([A-Z])/g;

// Подготовка данных для метода .data(). Количество вызовов: 2
function dataAttr( elem, key, data ) { //... }

// Проверка объекта кэша на пустоту. Количество вызовов: 3
function isEmptyDataObject( obj ) { //... }

// Количество вызовов: 2
function internalData( elem, name, data, pvt ) { /* правила обработки данных */ }

jQuery.fn.extend( { /* добавление следующих свойств в экземпляр jQuery: data, removeData */ } );

jQuery.extend( { /* добавление следующих свойств в объект jQuery: queue, dequeue, _queueHooks */ } );

jQuery.fn.extend( { /* добавление следующих свойств в экземпляр jQuery: queue, dequeue, clearQueue, promise */ } );

( function() {
  var shrinkWrapBlocksVal;
  support.shrinkWrapBlocks = function() {
    if ( shrinkWrapBlocksVal != null ) { return shrinkWrapBlocksVal; }
    shrinkWrapBlocksVal = false;
    var div, body, container;
    body = document.getElementsByTagName( "body" )[ 0 ];
    if ( !body || !body.style ) { return; }
    div = document.createElement( "div" );
    container = document.createElement( "div" );
    container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;
    left:-9999px";
    body.appendChild( container ).appendChild( div );
    if ( typeof div.style.zoom !== "undefined" ) {
      div.style.cssText =
      "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
      "box-sizing:content-box;display:block;margin:0;border:0;" +
      "padding:1px;width:1px;zoom:1";
      div.appendChild( document.createElement( "div" ) ).style.width = "5px";
      shrinkWrapBlocksVal = div.offsetWidth !== 3;
    }
    body.removeChild( container );
    return shrinkWrapBlocksVal;
  };
} )();
Ответить с цитированием