zoukankan      html  css  js  c++  java
  • Module

    一、严格模式

      1、严格模式的限制

    • 变量必须声明后再使用
    • 函数的参数不能有同名属性,否则报错
    • 不能使用with语句
    • 不能对只读属性赋值,否则报错
    • 不能使用前缀0表示八进制数,否则报错
    • 不能删除不可删除的属性,否则报错
    • 不能删除变量delete prop,会报错,只能删除属性delete global[prop]
    • eval不会在它的外层作用域引入变量
    • evalarguments不能被重新赋值
    • arguments不会自动反映函数参数的变化
    • 不能使用arguments.callee
    • 不能使用arguments.caller
    • 禁止this指向全局对象
    • 不能使用fn.callerfn.arguments获取函数调用的堆栈
    • 增加了保留字(比如protectedstaticinterface

    二、export和import命令

    • import命令具有提升效果,会提升到整个模块的头部,首先执行
    • import后面需要使用{}

    三、模块的整体加载

    • 用星号(*)指定一个对象,所有输出值都加载在这个对象上面
    • 语法如下:
    import * as objName from 'otehrModule';

    四、export default命令

    • 使用import命令的时候,用户需要知道所要加载的变量名或函数名,否则无法加载  //除整体加载使用*
    • export default命令,为模块指定默认输出
    • 其他模块加载该模块时,import命令可以为该匿名函数指定任意名字
    • 这时import命令后面,不使用大括号。
    // 输出
    export default function crc32() {
      // ...
    }
    // 输入
    import crc32 from 'crc32';
    
    // 输出
    export function crc32() {
      // ...
    };
    // 输入
    import {crc32} from 'crc32';

    五、模块的继承

    六、ES6模块加载的实质

    • ES6模块加载的机制,与CommonJS模块完全不同。CommonJS模块输出的是一个值的拷贝,而ES6模块输出的是值的引用

    七、循环加载

    • “循环加载”(circular dependency)指的是,a脚本的执行依赖b脚本,而b脚本的执行又依赖a脚本
    • 通常,“循环加载”表示存在强耦合,如果处理不好,还可能导致递归加载,使得程序无法执行,因此应该避免出现

    八、CommonJS模块的加载原理

    • CommonJS的一个模块,就是一个脚本文件。require命令第一次加载该脚本,就会执行整个脚本,然后在内存生成一个对象
    • 需要用到这个模块的时候,就会到exports属性上面取值。即使再次执行require命令,也不会再次执行该模块,而是到缓存之中取值。也就是说,CommonJS模块无论加载多少次,都只会在第一次加载时运行一次,以后再加载,就返回第一次运行的结果,除非手动清除系统缓存。
    • CommonJS模块遇到循环加载时,返回的是当前已经执行的部分的值,而不是代码全部执行后的值,两者可能会有差异。所以,输入变量的时候,必须非常小心。

    九、跨模块常量

    十、ES6模块的转码

    • Babel
    • ES6 module transpiler
    • SystemJS
    All rights reserved please indicate the source if reprint---吓尿了的大肥鼠
  • 相关阅读:
    第二次作业。。
    第一次随笔作业
    第一次作业
    第4次随笔
    第3次随笔
    第2次作业
    第一次随笔
    我的第一次随笔
    iforums
    第四次作业
  • 原文地址:https://www.cnblogs.com/realsoul/p/5560435.html
Copyright © 2011-2022 走看看