RequireJs:
一、安装、下载
    官网: requirejs.org
    Npm:  npm i requirejs
二、使用
    以前的开发方式的问题:
        1)、js 是阻塞加载
        2)、变量名冲突
        3)、多个JS文件之间相互依赖(必须保证一个正确的顺序)

1、简单示例
    require(['js/a1.js']);
        —— 不阻塞页面渲染了
2、定义模块:(AMD) define
    一个模块就是一个JS文件。

define(function(){
        //....
        return 模块要返回(导出)的东西
    });
3、模块的调用:require
    require([模块1,模块2...],function(mod1,mod2....){
        //所有模块加载完成后要做的事情
    });

4、模块返回值:可以是任何东西
    define(function(){
        return {
            a,
            show(){}
        }
    });
5、在一个模块里可以引入其它模块
    define(['想引入的模块1','想引入的模块2'...],function(mod1,mod2){
        mod1 -> 想引入的模块1
        ...
    });

注意:引入模块的路径,是由html文件决定。

6、路径问题
    /1.html
    /html/2.html
    /js/
        a1.js
        a2.js  (依赖a1.js)
    1) 1.html
        require(['js/a2.js']);
        a2.js :
            define(['a1.js']);  ×
            define(['js/a1.js']) √
    2)2.html
        require(['../js/a2.js']);
        a2.js:
            define(['js/a1.js'])   ×
            define(['../js/a1.js'])  √
        奇怪的事:
            使用    define(['../js/a1.js'])  √
            1.html 能正常使用
7、配置
    1) baseUrl

require.config({
        baseUrl:  // 用于指定模块的根目录
    });

/1.thml
        baseUrl: 'js2'
    /html/2.html
        baseUrl:'../js2'

有baseUrl ,不能加 .js 扩展名
    没有baseUrl,可加可不加

建议: 使用baseUrl, 不加 .js

2) paths:
        类似于给某个模块起别名

8、程序主入口
    <script src="require.js" data-main="js/main" ></script>

==========================
ES6:
    自己支持模块化。

let
块作用域
const
...:
    ...args —— 用于扩展函数参数
    ?
()=>

?let map = new Map();
map.set
map.get
map.delete

``

?str.startsWith
str.endsWith

数组方法

==========================
ES6:
    let a = 12;

浏览器对ES6的支持不完整。不同的浏览器支持的程度也不同。

在不支持的情况下,要使用ES6,借助工具 —— 可以把 ES6的语法翻译成ES5或以前的。

工具:
        1)网页
            http://babeljs.io/repl/

https://google.github.io/traceur-compiler/demo/repl.html#let%20a%20%20%3D%2012%3B%0A

用于 测试语法的正确性。
        2)本地环境
        babel
        traceur:
            浏览器端 直接使用 ES6语法,进行翻译的一个较方便的工具:
                traceur.js
                bootstrap.js  —— 和前端布局使用的bootstrap没有任何关系
            <script src="js/traceur.js"></script>
            <script src="js/bootstrap.js"></script>
            <script type="module">
============================================
ES6模块化:
    定义(导出):
        1、
            export 定义
            export let a = 12;
            export let b = 5;
            export function show(){}

2、
        let a = 12;
        export default {
            a
        }
    使用:
        1、import {a,b,show} from 'js/a.js'  //注意名字必须和导出的名字一致

2、
            import modA from 'js/a.js'  //a.js 扩展名  .js  不能省略

在模块中引用其它模块:
        a.js
            import modA from './b.js'

==========================

node中引模块:
    const express = require('express');  //node_modules
    自己定义的模块,非系统模块的引入:
        const modA = requires('./modules/modA');
==========================
ES6常用补充:
    1、  ...   扩展参数  Rest Arguments
        1) function show(a,b,...arg){}
        2) 复制数组:  arr=[...arr2];
            a. 循环赋值
            b. ...
            c. arr2 = Array.from(arr);  //不支持ie
    2、字符串新增
        str.startsWith('字符串1') //判断 str 是否以 字符串1 开头  —— true/false
        str.endsWith('字符串2') //判断 str 是否以 字符串2 结尾 —— true/false
    3、Map
        一种新的数据结构。也是一种 key/value的形式。 键/值 对。
        结构:  []  {}
        1)  let map = new Map();   // 得到一个Map 对象
        2) 增加一项
            map.set('key',value);
        3) 取一项
            map.get('key');
            //返回 key 对应的value值
            //如果找不到,返回 undefined
        4) 删一项
            map.delete('key');
    4、for ... of
        循环:
            for
            for...in
            while
        循环数组:
            for(let item in arr){
                item -> 数组的每一项
            }
        循环JSON:  不能
        循环Map:
            1)
                for(let item of map){
                    item[0]  —— key
                    item[1] —— value
                }
                item 是数组
            2) 解构赋值
                for(let [k,v] of map){
                    k —— key
                    v —— value
                }

[k,v] = item;
            3) for(let item of map.entries()){}  //默认值,如果用 map 和 map.nentries() 效果一样
            4) for(let key of map.keys()){}
            5) for(let val of map.values()){}
        再循环数组:
            1)  for(let item of arr.entries()){}
                item ->  [下标,值]
            2) for(let key of arr.keys()){}
                key ->  数组下标
            3) for(let v of arr.values()){}   ×
                
    5、箭头函数的简写
        1) 如果函数体只有一句话,并且是return
            —— 可以把  return 和 {} 省略
        2) 如果函数参数只有一个
            —— 可以把 () 省略
            (a)=>{...}
            a=>{...}
    6、数组新方法
        数组方法:  push  pop shift unshift splice sort concat reverse join
            indexOf
        ES6新增:
            1) map  —— 映射
                对数组中的每一项做相同的操作——产生一个新数组
                let arr2 = arr.map(function(item){
                    //alert(item);
                    return item + 1;
                });
                arr2 ——> arr 的每一项加1的结果
            2) forEach —— 循环
                arr.forEach(function(val,index){
                    val ——> 数组每一项的值
                    index ——> 数组的下标
                });
            3) filter —— 过滤
                let arr2 = arr.filter(function(item){
                    return item > 5;   // 条件: true /false
                });
                arr2 ——> arr中值 大于5的
            4) reduce —— 汇总
                a.
                    arr.reduce(function(前一个,当前,索引,自己){
                        前一个:第一次 是  第一个数
                            以后  是 undefined
                    });
                b.
                    arr.reduce(function(前一个,当前,索引,自己){
                        return xxx;  //xxx 就是下一次的 前一个
                    });
                c.
                    arr.reduce(function(pre,cue,index,self){},前一个);

* reduce方法,如果给定前一个值,那么第一次的前一个就是给定值
                    如果没有给定前一个值,那么把数组的第一项做为前一个
            应用:
                1)数组求和
                    let sum = arr.reduce((pre,cur,index,self)=>{
                        return pre + cur;
                    });
                2)二维数组扁平化
                    let arr = [
                        [1,2],
                        [3,4],
                        [5,6]
                    ];

前端学习(三十五)模块化es6(笔记)的更多相关文章

  1. 前端学习(十五):了解 Javascript

    进击のpython ***** 前端学习--了解JavaScript Javascript是一种运行在浏览器中的解释型的编程语言 还记得我们在说python的时候提过解释型和编译型的区别 在解释型语言 ...

  2. 前端学习(三十四)对象&模块化(笔记)

    人,工人 //类的定义    function Person(name,age){ //构造函数        //工厂模式        //1.原料        //var obj = new ...

  3. 前端学习(三十)es6的一些问题(笔记)

    赋值表达式    document.onclick = document.onmouseover = fn;    var a = b = c = d = 5;             不推荐 逗号表 ...

  4. 前端学习(三十六)promise(笔记)

    一个页面:  头部.用户信息.新闻列表 jquery ajax:  1.$.ajax({    url:'',    dataType:'json', }).then(res=>{    //r ...

  5. 前端学习(三十九)移动端app(笔记)

    移动端App    开发App的三种方式    Native App         原生        底层语言        java         Android        oc      ...

  6. 前端学习(三十八)vue(笔记)

    Angular+Vue+React    Vue性能最好,Vue最轻=======================================================Angular     ...

  7. 前端学习(二十八)es6&ajax(笔记)

    ES6    let    块级作用域    const    解构赋值    字符串拼接    扩展运算符    ------------------------------------------ ...

  8. Salesforce LWC学习(三十五) 使用 REST API实现不写Apex的批量创建/更新数据

    本篇参考: https://developer.salesforce.com/docs/atlas.en-us.224.0.api_rest.meta/api_rest/resources_compo ...

  9. Java开发学习(三十五)----SpringBoot快速入门及起步依赖解析

    一.SpringBoot简介 SpringBoot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化 Spring 应用的初始搭建以及开发过程. 使用了 Spring 框架后已经简化了我 ...

随机推荐

  1. 使用Windows service创建一个简单的定时器

    一.需求 我们有时候可能会想要做一些定时任务,例如每隔一段时间去访问某个网站,或者下载一些东西到我们服务器上等等之类的事情,这时候windows service 是一个不错的选择. 二.实现 1.打开 ...

  2. js中元素更新value页面体现不出来的原因

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 检测代理IP匿名程度的方法,很实用

    做网络的基本都知道代理,这个是肯定的,不管是用花刺还是猎手的网页代理,还是直接VPN的通道代理,代理有着不用说大家也知道的重要性.不管是做CPA还是做点击亦或者投票,代理都能帮我们一下,虽然帮的忙不大 ...

  4. Yii 1.1 常规框架部署和配置

    <?php //index.php //入口文件配置操作 // change the following paths if necessary $yii=dirname(__FILE__).'/ ...

  5. RHEL7(RedHat 7)本地yum源的配置

    配置yum 源 1.挂载DVD光盘到/mnt   因为配置时候路径名里面不能有空格,否则不能识别  [root@ mnt]# mount /dev/cdrom /mnt 2.在目录/etc/yum.r ...

  6. leetcode 141. 环形链表(C++)

    给定一个链表,判断链表中是否有环. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 -1,则在该链表中没有环. 示例 1: 输入: ...

  7. 非典型T_SQL的总结

      ------over的两种常用的用法--- --第一种分组 当然要注意了,这里的分组并不是实际的分组,而是根据你的业务需求而坐的临时分组   select roomguid,Room, avg(t ...

  8. 大数据学习笔记之Zookeeper(一):Zookeeper理论篇(一)

    文章目录 1.1 概述 1.2 应用场景 1.3 下载地址 1.1 概述 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目. Zookeeper从设计模式角度来理解: ...

  9. C# 加密解密类

    一. MD5  1 防止看到明文 数据库密码,加盐(原密码+固定字符串,然后再MD5/双MD5)  2 防篡改   3 急速秒传(第一次上传文件,保存md5摘要,第二次上传检查md5摘要)   4文件 ...

  10. 阅读笔记06-架构师必备最全SQL优化方案(2)

    四.基础优化 1.优化思路? 定位问题点吮吸:硬件-->系统-->应用-->数据库-->架构(高可用.读写分离.分库分表). 处理方向:明确优化目标.性能和安全的折中.防患未然 ...