首页 > 语言 > JavaScript > 正文

require.js中的define函数详解

2024-05-06 15:14:38
字体:
来源:转载
供稿:网友

前言

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

在定义一个模块的时候,方法的第一行写一个“use strict”;这是干什么的?

use strict --严格模式,这种模式使得Javascript在更严格的条件下运行。

消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为; 消除代码运行的一些不安全之处,保证代码运行的安全; 提高编译器效率,增加运行速度; 为未来新版本的Javascript做好铺垫。

1. 简单的值对模块

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

define({ name: "hehe", age: "18"});

2. 简单的函数模块

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

define(function() { return { name: "hehe", age: "18" };});

3. 依赖函数模块

define([ 'angular', 'jsUtil', 'modules/meet/modules', 'modules/meet/services/Meet', 'modules/meet/services/MeetRemoteService'],function(require) { 'use strict'; var module = angular.module('meet.services'); module.factory('MeetService', function(Meet, MeetRemoteService) { var service = {  name: 'hehe',  age: '18' }; return service; });});

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

4. 返回函数模块

define([ 'angular', 'jsUtil', 'modules/meet/modules', 'modules/meet/services/Meet', 'modules/meet/services/MeetRemoteService'],function(require) { 'use strict'; var module = angular.module('meet.services'); module.factory('MeetService', function(Meet, MeetRemoteService) { var service = {}; service.getWeekOfMeet = function(weekFlag, date) {  return MeetRemoteService.get(weekFlag, date).then(function(data) {  data.content = Meet.sortMeet(data.content);  return data;  }); } return service; });});

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

5. 完整定义

define('sample3' ,['sample','sample1'],function (sample,sample1) { var sample4 = require('sample4'); return function(){ alert(sample.name+':'+sample.sayhell()); } });            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选