博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RequireJS define 详细介绍
阅读量:6657 次
发布时间:2019-06-25

本文共 1899 字,大约阅读时间需要 6 分钟。

hot3.png

1、定义模块

    模块不同于传统的脚本文件,它良好地定义了一个作用域来避免全局名称空间污染。它可以显式地列出其依赖关系,并以函数(定义此模块的那个函数)参数的形式将这些依赖进行注入,而无需引用全局变量。RequireJS的模块是模块模式的一个扩展,其好处是无需全局地引用其他模块。 RequireJS的模块语法允许它尽快地加载多个模块,虽然加载的顺序不定,但依赖的顺序最终是正确的。同时因为无需创建全局变量,甚至可以做到在同一个页面上同时加载同一模块的不同版本。 

    一个文件应该只定义 1 个模块。多个模块可以使用内置优化工具将其组织打包。

2、简单的值对模块

define({    color: "black",    size: "unisize"});

// 其实就是把文件名称作为name参数传入,若依赖该组件那么返回的就是一个对象!

3、简单函数模块

define(function () {    //Do setup work here    return {        color: "black",        size: "unisize"    }});

// 和上面一样文件名称作为默认的name,与上面的差异是,可以提前执行返回值外的代码

4、依赖函数模块

define(['sample','sample1'],function (sample,sample1) {    return {        color: sample.color,        size:  sample2.sayhell()    }});

// 和上面一样,关键是依赖模块是以返回值作为入参的形式传入,如果加载错误或者没有找到对应的模块,那么得到的入参是Undefiend,需要注意!

5、返回函数模块

define(['sample','sample1'],function (sample,sample1) {    return function(){        alert(sample.name+':'+sample.sayhell());    }});

// 和上面一样,这里返回的是函数,在依赖模块中把他作为函数对象调用即可,其实这是一个简单的闭包!

6、完整定义

define('sample3' ,['sample','sample1'],function (sample,sample1) {
    var sample4 = require('sample4');    return function(){        alert(sample.name+':'+sample.sayhell());    }});

// 这就是完整定义,有名称,有依赖,有回调,内部还有common的形式引入依赖对象!

7、关于define函数的name和require函数的依赖名称之间的关系

1)define(name,[] , callback); 这个name可以省掉,默认是文件名称;当然也可以自定义,一旦我们定义了name,根据源代码我们可以发现define函数内部其实就是把这个name以及依赖模块、回调函数作为一个对象存储在全局的数组当中,也就是 defQueue.push([name,deps,callback]);那么这个name就是这个组件注册的的ID!

2)require([name , name2],callback); 系统首先会在全文检索path中是否对应的路径,如果没有自然把他作为路径拼接在baseUrl上去异步加载这个js文件,加载时从源代码中可以看到 ,var data = getScriptData(evt);返回的 data.id 其实就是name,然后执行contex.completeLoad(node.id),其内部就很清楚了,把define中注册的name和这里得到的name进行比较如果相等就执行,所以道理就是:require 和 define 的 name 必须保证一致!

标签加载完成之后,获取标签的唯一标识name

121925_GovY_1989321.png

通过把之前得到的name比较defQueue中的元素name进行组件调用,下图可以看出 require中是 sample/js/sample , 而define则是 sample , 所以不会执行sample组件,那么,在require的回调函数中也就不会获取到 sample的返回值!

121943_HxTd_1989321.png

转载于:https://my.oschina.net/heweipo/blog/509554

你可能感兴趣的文章
我的友情链接
查看>>
我的友情链接
查看>>
路由器的密码恢复
查看>>
使用Hystrix守护应用(3)
查看>>
mysql数据库show processlist查看当前连接数及状态,show status查看所有状态
查看>>
我的友情链接
查看>>
收集了一些linux的命令
查看>>
"101"比"1203"大的时候.java中的比较办法和Oracle中的比较办法!!
查看>>
马云经典语录--你最喜欢哪一句
查看>>
Scenario 6 –HP C7000 Virtual Connect FlexFabric SUS with A/A Uplinks, 8
查看>>
Java 框架新贵入驻 TechEmpower Framework Benchmark
查看>>
CentOS6.3 64位安装wine出错,牛人帮帮忙
查看>>
js获取textarea标签中的换行符和空格。
查看>>
国内的Maven服务器
查看>>
C# winform DataGridView 的18种常见属性
查看>>
Cygwin的安装、配置与调整
查看>>
MySQL存储过程
查看>>
做有中国特色的程序员
查看>>
JVM【第九回】:【OutOfMemoryError异常之本机直接内存溢出】
查看>>
Angular
查看>>