模块化

  • js前期是没有模块化的概念,会造成变量冲突
  • 解决方法(立即执行函数)
;var space = (function(w) {
  let name = 'caoyang'
  
  // 方式一
  return {
      name,
  }
  // 方式二
  w.name = name
})(window);

通过一系列的方式,前端并没有找到合适的方式去解决上面的问题,但是这个 nodejs 诞生。
nodejs 借鉴别的的语言的模块化的规范,形成一个自己的模块化规范, 叫做同步加载规范(commonjs规范):好比加载一个模块的时候,只有模块加载完毕后,后面的代码才执行。(commonjs 规范:如果是在服务器端是没有任何问题,服务器代码和模块都是在一个磁盘文件)

前端发现 commonjs 规范,很好,想拿来直接用。 问题:前端和后端进行交互是通过网络请求(延时)如果前端加载某个模块需要很长的时间,用户体验不好。

前端把 commonjs 规范进行革新,中国淘宝(玉伯,射雕)对其做了优化,形成一个新的规范 CMD 规范(基于这个规范,写一个库 sea.js)

国外大牛基于 commonjs 规范,做一个 AMD规范(异步加载规范 require.js 库)

上面的这些规范都不是 官方的规范(ECMA),都是民间组织自己弄出来。 官方借鉴这些规范,形成一个自己的规范 es6 module(es6 模块化)

commonjs

  • 在 Node 中,默认在代码最后有一句 return module.exports
  • exports是module.exports的 一个引用
  • 给 exports 赋值会断开和 module.exports 之间的引用, 同理,给 module.exports 重新赋值也会断开
    示例代码:

math.js

exports.add = function() {
    var sum = 0, i = 0, args = arguments, l = args.length;
    while (i < l) {
        sum += args[i++];
    }
    return sum;
};

increment.js

var add = require('math').add;
exports.increment = function(val) {
    return add(val, 1);
};

program.js

var inc = require('increment').increment;
var a = 1;
inc(a); // 2

es6 module

a.js

export const sqrt = Math.sqrt;
export function square(x) {
    return x * x;
}

b.js

import { square, sqrt } from 'a.js';
console.log(square(11)); // 121

默认导出
myFunc.js

export default function () { ... };

main1.js

import myFunc from 'myFunc';
myFunc();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值