>  기사  >  웹 프론트엔드  >  es6에서 리소스를 가져오는 데 사용할 항목

es6에서 리소스를 가져오는 데 사용할 항목

青灯夜游
青灯夜游원래의
2022-04-19 19:48:331382검색

es6에서는 import 문이나 import()를 사용하여 리소스를 가져올 수 있습니다. import 명령은 "import (resource location)" 구문을 사용하여 지정된 모듈(리소스 파일)을 가져오는 데 사용됩니다. import()는 "import(리소스 위치) 구문으로 파일 또는 모듈을 가져오는 데 사용됩니다. )".

es6에서 리소스를 가져오는 데 사용할 항목

이 튜토리얼의 운영 환경: Windows 7 시스템, ECMAScript 버전 6, Dell G3 컴퓨터.

모듈 개발은 ES6 모듈 사양에 정의된 es6에서 수행할 수 있습니다.

  • 각 js 파일은 독립 모듈입니다.

  • import 키워드를 사용하여 다른 모듈 멤버를 가져옵니다.

  • 공유 모듈 멤버는 내보내기 키워드

export 명령

export

을 사용합니다. 모듈 기능은 주로 exportimport 두 가지 명령으로 구성됩니다. export 명령은 모듈의 외부 인터페이스를 지정하는 데 사용되며, import 명령은 다른 모듈에서 제공하는 기능을 가져오는 데 사용됩니다. exportimportexport命令用于规定模块的对外接口,import命令用于导入其他模块提供的功能。

一个模块就是一个独立的文件。该文件内部所有的变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用export关键字输出该变量。
例如:

//test1.js
export var firstName = 'mike'
export var lastName = 'Jack'

上面代码是test1.js文件,保存了用户信息。ES6将其视为一个模块,里面用export命令对外部输出了三个变量。
export的写法,除了像上面哪样,还有另一种写法:

//test1.js
var firstName = 'mike'
var lastName = 'Jack'
export {firstName, lastName}

export命令除了输出变量,还可以输出函数或类

export function add(x, y){
    return x + y
}

export命令可以出现在模块得任意位置,只要处于模块顶层就可以。如果处于块级作用域内,就会报错,import命令也是如此

as

通常情况下,export输出的变量就是本来的名字,但是可以使用as关键字重命名

function v1() { ... }
function v2() { ... }

export {
  v1 as streamV1,
  v2 as streamV2,
  v2 as streamLatestVersion
};

import命令

使用export命令定义了模块的对外接口以后,其他js文件就可以通过import命令加载这个模块

import {firstName, lastName} from './test1.js'
console.log(firstName,lastName)

如果想为输入的变量重新取一个名字,import命令要使用as,将输入的变量重命名。

import {lastName as suName} from './test1.js'

import命令输入的变量都是只读的,因为它的本质是输入接口。也就是说,不允许在加载模块的脚本里面改写接口。

import {a} from './xxx'
a = {}   //报错

import后面的from指定模块文件的位置,可以是相对路径,也可以是绝对路径,.js后缀可以省去。如果只是模块名,不带有路径,那么必须有配置文件,告诉JavaScript引擎该模块的位置

模块的整体加载

除了指定加载某个输出值,还可以使用整体加载,即用星号(*)指定一个对象,所有输出值都加载在这个对象上面。

下面是一个circle.js文件,它输出两个方法areacircumference

// circle.js
export function area(radius) {
  return Math.PI * radius * radius;
}

export function circumference(radius) {
  return 2 * Math.PI * radius;
}

现在,加载这个模块。

// main.js

import { area, circumference } from './circle';
console.log('圆面积:' + area(4));
console.log('圆周长:' + circumference(14));

上面写法是逐一指定要加载的方法,整体加载的写法如下。

import * as circle from './circle';
console.log('圆面积:' + circle.area(4));
console.log('圆周长:' + circle.circumference(14));

注意,模块整体加载所在的那个对象(上例是circle),应该是可以静态分析的,所以不允许运行时改变。下面的写法都是不允许的。

import * as circle from './circle';

// 下面两行都是不允许的
circle.foo = 'hello';
circle.area = function () {};

export default 命令

export default用来为模块指定默认输出

//export-default.js
export default function(){
    console.log('foo')
}

其他模块加载该模块时,import命令可以为该匿名函数指定任意名字

import cus from './export-default.js'

export default命令用在非匿名函数前,也是可以的,但是在模块外部该函数名是无效的,加载的时候,视为匿名函数加载,本质上,export default就是输出一个叫做default的变量或方法,然后系统允许你为他取任意名字

export default function test(){
    console.log('test')
}

对比正常输出和默认输出

//第一组
export function arc(){
    //...
} //输出

import {arc} from 'arc'  //输入

//第二组
export default arc2(){
    //...
}  //输出
import arc2 from 'arc2'   //输入

总结:export对应的import语句需要使用大括号,export default对应的import语句不需要使用大括号。export default命令用于指定模块的默认输出,显然,一个模块只能有一个默认输出,因此export default在同一个模块中只允许使用一次。所以与他对应的import命令后面才不用加大括号

export 与 import的复合写法

如果在一个模块中,先输入后输出同一个模块,import语句可以与export

모듈은 독립된 파일입니다. 이 파일 내의 모든 변수는 외부에서 얻을 수 없습니다. 외부 세계에서 모듈 내부의 변수를 읽을 수 있도록 하려면 export 키워드를 사용하여 변수를 내보내야 합니다. 🎜 예: 🎜
export {foo, bar} from 'my_module'
//可以简单理解为
import {foo, bar} from 'my_module'
export {foo, bar}
🎜위 코드는 사용자 정보를 저장하는 test1.js 파일입니다. ES6에서는 export 명령을 사용하여 세 가지 변수를 외부로 내보내는 모듈로 처리합니다. 위와 같이 🎜export를 작성하는 것 외에 또 다른 작성 방법이 있습니다: 🎜
const main = document.querySelector('main');
import(`./section-modules/${someVariable}.js`)
  .then(module => {
    module.loadPageInto(main);
  })
  .catch(err => {
    main.textContent = err.message;
  });
🎜변수를 출력하는 것 외에도 export 명령은 함수나 클래스를 출력할 수도 있습니다🎜 rrreee🎜export 명령은 모듈의 최상위 수준에 있는 한 모듈의 어느 곳에나 나타날 수 있습니다. 블록 수준 범위에 있으면 오류가 보고되며 import 명령도 마찬가지입니다🎜🎜🎜🎜as🎜🎜🎜🎜일반적으로 에 의해 출력되는 변수는 내보내기는 원래 이름이지만 as 키워드를 사용하여 🎜rrreee🎜🎜import 명령🎜🎜🎜export 명령을 사용하여 정의한 후 이름을 바꿀 수 있습니다. 모듈의 외부 인터페이스, 다른 js 파일은 import 명령을 통해 이 모듈을 로드할 수 있습니다🎜rrreee🎜입력 변수의 이름을 바꾸려면 import 명령을 사용하여 이름을 바꾸세요. 입력 변수 이름. 🎜rrreee🎜import 명령으로 입력된 변수는 모두 읽기 전용입니다. 그 본질은 입력 인터페이스이기 때문입니다. 즉, 모듈을 로드하는 스크립트에서 인터페이스를 다시 작성할 수 없습니다. import 뒤의 🎜rrreee🎜from은 모듈 파일의 위치를 ​​지정하며, 이는 .js 접미사일 수 있습니다. 생략 가능합니다. 경로 없이 모듈 이름만 있는 경우 JavaScript 엔진에 모듈의 위치를 ​​알려주는 구성 파일이 있어야 합니다🎜🎜모듈의 전체 로딩🎜🎜로드할 특정 출력 값을 지정하는 것 외에도 다음을 수행할 수 있습니다. 또한 전체 로딩을 사용합니다. 즉, 별표(*)를 사용합니다. 모든 출력 값이 로드되는 개체를 지정합니다. 🎜🎜다음은 areacircumference 두 가지 메소드를 출력하는 circle.js 파일입니다. 🎜rrreee🎜이제 이 모듈을 로드하세요. 🎜rrreee🎜위 방법은 로드할 메소드를 하나씩 지정하는 것입니다. 전체적인 로드 방법은 다음과 같습니다. 🎜rrreee🎜모듈이 전체적으로 로드되는 객체(위의 예는 circle)는 정적으로 분석 가능해야 하므로 런타임 변경이 허용되지 않습니다. 다음과 같은 작성 방법은 허용되지 않습니다. 🎜rrreee🎜export 기본 명령🎜🎜export default는 모듈의 기본 출력을 지정하는 데 사용됩니다🎜rrreee🎜다른 모듈이 모듈을 로드할 때 import 명령은 무엇이든 지정할 수 있습니다 익명 함수의 경우 이름 🎜rrreee🎜export default 명령은 익명이 아닌 함수 앞에도 사용할 수 있지만 모듈 외부에서는 함수 이름을 로드할 때 익명 함수로 간주됩니다. 기본적으로 기본값 내보내기기본값이라는 변수나 메서드를 내보내는 것이며 시스템에서 이름을 지정할 수 있습니다🎜rrreee🎜일반 출력과 기본값을 비교하세요. output🎜rrreee🎜🎜요약:🎜 export에 해당하는 import 문은 중괄호를 사용해야 하고, export에 해당하는 <code>import 문은 default에는 중괄호를 사용할 필요가 없습니다. export default 명령은 모듈의 기본 출력을 지정하는 데 사용됩니다. 분명히 모듈은 하나의 기본 출력만 가질 수 있으므로 export default는 한 번만 사용할 수 있습니다. 같은 모듈에서. 따라서 해당 가져오기 명령 뒤에 중괄호를 추가할 필요가 없습니다🎜🎜내보내기와 가져오기의 결합된 작성 방법🎜🎜모듈에 있는 경우 먼저 입력하고 동일한 모듈인 import를 출력합니다. 문은 Export와 함께 사용할 수 있습니다. 문은 함께 작성됩니다🎜
export {foo, bar} from &#39;my_module&#39;
//可以简单理解为
import {foo, bar} from &#39;my_module&#39;
export {foo, bar}

上面代码中,exportimport语句可以结合在一起,写成一行。但需要注意的是,写成一行以后,foobar实际上并没有导入当前模块,只是相当于对外转发了这两个接口,导致当前模块不能直接使用foobar.

import()函数

import(specifier)

上面的代码中,import函数的参数specifier,指定所要加载的模块的位置。。import命令能够接受什么参数,import()函数就能接受什么参数,两者区别主要是后者为动态加载。

import()返回一个 Promise 对象。下面是一个例子。

const main = document.querySelector(&#39;main&#39;);
import(`./section-modules/${someVariable}.js`)
  .then(module => {
    module.loadPageInto(main);
  })
  .catch(err => {
    main.textContent = err.message;
  });

import()函数可以用在任何地方,不仅仅是模块,非模块的脚本也可以使用。它是运行时执行,也就是说,什么时候运行到这一句,就会加载指定的模块。另外,import()函数与所加载的模块没有静态连接关系,这点也是与import语句不相同。import()类似于 Node 的require方法,区别主要是前者是异步加载,后者是同步加载。

【相关推荐:javascript视频教程web前端

위 내용은 es6에서 리소스를 가져오는 데 사용할 항목의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.