• avalon中require的实现


    var plugins = {
        loader: function(builtin) {
            window.define = builtin ? innerRequire.define : otherDefine
            window.require = builtin ? innerRequire : otherRequire
        },//判断使用那个require 和define
    innerRequire = avalon.require = function(array, factory, parentUrl) {
            if (!Array.isArray(array)) {
                avalon.error("require的第一个参数必须是依赖列数,类型为数组 " + array)
            }
    
            var deps = {} // args的另一种表现形式,为的是方便去重
            var id = parentUrl || "callback" + setTimeout("1")
            /* setTimeout("1")
             * 
             * setTimeout() 方法的返回值是一个唯一的数值,这个数值有什么用呢?如果你想要终止 setTimeout() 方法的执行,那就必须使用 clearTimeout() 方法来终止,
             * 而使用这个方法的时候,系统必须知道你到底要终止的是哪一个 setTimeout() 方法
             * (因为你可能同时调用了好几个 setTimeout() 方法),这样 clearTimeout() 方法就需要一个参数,
             * 这个参数就是 setTimeout() 方法的返回值 (数值),用这个数值来唯一确定结束哪一个 setTimeout() 方法。
             * 在系统中每次调用一次,就会递增一次 
             * 
             */
            parentUrl = getBaseUrl(parentUrl)//获取模块加载的根目录
            /*
             *  function getBaseUrl(parentUrl) {
                            return kernel.baseUrl ? kernel.baseUrl : parentUrl ?
                                   parentUrl.substr(0, parentUrl.lastIndexOf("/")) :
                                   kernel.loaderUrl
                            }
                            kernel在配置系统模块可以找到,该对象主要是处理我们自己配置的条件。
             */
            //加载每个依赖的文件
            array.forEach(function(el) {
                var url = loadResources(el, parentUrl) //加载资源,并返回能加载资源的完整路径
                if (url) {
                    if (!deps[url]) {//去重:如果deps中存在url,那就不用加入到依赖项数组中
                        args.push(url)
                        deps[url] = "司徒正美" //去重:
                    }
                }
            })
            if (!modules[id]) {
                //如果此模块是定义在另一个JS文件中, 那必须等该文件加载完毕
                //才能放到检测列队中
                loadings.push(id)
            }
            if (!modules[id] || modules[id].state !== 2) {
                modules[id] = makeModule(id, 1, factory, deps, args)//更新此模块信息
            }
          
            checkDeps()
        }
    just do myself
  • 相关阅读:
    SDN原理 OpenFlow协议 -3
    SDN原理 OpenFlow协议 -2
    蓝桥杯----特殊的回文
    hdu-4513吉哥系列故事——完美队形II--最长回文
    蓝桥杯: 基础练习 十六进制转八进制
    母函数模板核心
    杭电ACM hdu 2079 选课时间 (模板)
    杭电ACM hdu 1398 Square Coins
    求用1g、2g、3g的砝码(每种砝码有无穷多个)称出10g的方案有几种
    有1克、2克、3克、4克的砝码各一枚,能称出哪几种重量?
  • 原文地址:https://www.cnblogs.com/rookieCat/p/4635162.html
Copyright © 2020-2023  润新知