ES6 지식 - 모듈 모듈

4.5 모듈 모듈

4.5.1 개념

  • ES6하기 전에 가장 중요한,로드 프로그램 모듈을 개발 CommonJS와 AMD의 두 종류가 있습니다 .

  • 서버에 대한 CommonJS, 브라우저의 AMD.

  • 에서 ES6 언어 표준 수준의 모듈 기능의 실현에, 같은 브라우저와 서버 범용 모듈 솔루션 .

  • ES6 모듈 설계 이다 가능한 정적만큼 , 그래서 컴파일러 때 모듈 의존성뿐만 아니라 입력 및 출력 변수들을 결정할 수있다.

    // CommonJS模块
    let { stat, exists, readFile } = require('fs');
    // 等同于
    let _fs = require('fs');
    let stat = _fs.stat, exists = _fs.exists, readfile = _fs.readfile;
    //★结果分析:这种加载称为“运行时加载”,
    //因为只有运行时才能得到这个对象,导致完全没办法在编译时做“静态优化”
  • "로드 컴파일시"또는 정적 하중

    • 즉 ES6가 될 수있다 모듈이로드 시간을 컴파일 완료 , 효율 모듈 로딩 CommonJS의 비율이 높은 .
    • 사용 의 전체 속도 와 캐리어, 즉를 별표하면 ( *) 그 위에 적재 된 물체의 모든 출력값 객체를 지정한다.
  • 펑션 블록은 주로 두 가지 명령으로 구성 : 수출 및 수입.

    • 수출 명령은 외부 인터페이스 모듈을 지정하는 데 사용됩니다
    • 다른 모듈에 의해 제공 반입 명령 입력 기능.

4.5.2 엄격 모드

  • ES6 모듈은 자동으로 엄격 모드를 사용 하면 추가 모듈 헤더에 "엄격한 사용"여부,;.
  • 엄격 모드가 있습니다 다음과 같은 제한 사항 :
    • 변수는 사용하기 전에 선언해야합니다;
    • 함수 매개 변수, 그렇지 않으면 오류가 같은 이름의 속성을 가질 수 없습니다;
    • 당신은 문으로 사용할 수 없습니다;
    • 읽기 전용 속성, 그렇지 않으면 오류를 할당 할 수 없습니다;
    • 당신은 0 8 진수를 나타내는 접두사, 그렇지 않으면 오류를 사용할 수 없습니다;
    • 당신은 속성을 삭제할 수 없습니다, 그렇지 않으면 오류를 삭제할 수 없습니다;
    • 당신은하지 삭제 변수 삭제 소품, 당신은 제거 할 수 있습니다, 불평 수 있습니다 재산 삭제 글로벌 [소품]
    • 평가는 포위 범위에 변수를 도입하지;
    • 평가 및 인수를 재 할당 할 수 없습니다;
    • 인수가 자동으로 함수 매개 변수의 변화를 반영하지 않는다;
    • 당신은 arguments.callee를 사용할 수 없습니다;
    • 당신은 arguments.caller 사용할 수 없습니다;
    • 전역 객체에이 점을 금지;
    • 당신은 fn.caller를 사용할 수 없으며 fn.arguments는 함수 호출 스택을 얻을;
    • (예컨대 보호 정적 인터페이스 등) 예약어 증가.

4.5.3export 명령

  • 모듈은 독립형 문서 . 내부 문서는 모든 변수는 외부 얻을 수 없다 .

  • 당신이 원하는 경우에 읽을 수있는 외부 모듈 내부의 변수를 취할를, 당신은 사용해야합니다 (가) 출력 변수를 내보내 키워드 .

  • 그런데 외부 출력 변수 :

    //方式一:var 
    export var firstName = 'jack';
    export var lastName = 'huang';
    //方式二:大括号
    var firstName = 'jack';
    var lastName = 'huang';
    export { firstName,lastName }
    //方式三:输出函数或类(class)
    export function addd(x, y) {return x * y;};
    //方式四:可以使用as关键字重命名
    var firstName = 'jack';
    var lastName = 'huang';
    export { firstName as f1, lastName as f2}

4.5.4import 명령

  • 다른 JS 당신이 할 수있는 파일 가져 오기 명령을 모듈을로드 .

  • 참고 import 명령 리프팅 효과가 로 승격한다 전체 모듈 헤드 먼저 수행 .

  • 반입 명령은 허용 중괄호 쌍 하고, 지정된 다른 모듈에서 수입으로 변수 이름 . 변수 이름은 내부 교정기 (main.js)는 외부 인터페이스 모듈에 도입해야 동일한 이름 .

  • 당신이 변수를 다시 입력하려면 새로 만들기 이름을 가져 오기 명령을 키워드로 사용되는 , 이름 변수 입력.

  • 뒤에서 오기 지정된 파일 모듈의 위치 일 수있다 상대 경로 일 수있다 절대 경로 , 경로가 생략 된 .js있다 .

    // a.js
    import {firstName, lastName} from './main.js';
    console.log(firstName)
    
    import {firstName as newName} from './main.js';

4.5.5export의 기본 명령

  • 하기 위해 사용자에게 편의를 제공 그들이 그렇게하는 것이, 모듈을로드 할 수있을 것입니다 문서를 읽지 않는다 , 필요가 수출 기본 명령을 사용하여 , 모듈 지정 기본 출력을 .

  • 다른 모듈은 모듈을로드 할 때, 가져 오기 명령은 익명 함수에 대한 이름을 지정할 수 있습니다 .

    // export-default.js
    export default function () {
      console.log('foo');
    }
    // import-default.js
    import customName from './export-default';
    customName();    // 'foo'
    //★需要注意的是,这时import命令后面,不使用大括号。
  • 일반 출력과 비교 기본 출력

    // 第一组   默认输出
    export default function crc32() { // 输出
      // ...
    }
    import crc32 from 'crc32'; // 输入
    // 第二组    正常输出
    export function crc32() { // 输出
      // ...
    };
    import {crc32} from 'crc32'; // 输入xport-default';
    customName(); // 'foo'

4.5.6export 복잡한 표현의 수입

  • 모듈 중 하나 인 경우 상기 제 동일한 입출력 모듈 수출입 진술 문 수 함께 물품 .

    export { foo, bar } from 'my_module';
    // 等同于
    import { foo, bar } from 'my_module';
    export { foo, boo};

추천

출처www.cnblogs.com/xuzhengguo/p/12088963.html