es6에서는 import 문이나 import()를 사용하여 리소스를 가져올 수 있습니다. import 명령은 "import (resource location)" 구문을 사용하여 지정된 모듈(리소스 파일)을 가져오는 데 사용됩니다. import()는 "import(리소스 위치) 구문으로 파일 또는 모듈을 가져오는 데 사용됩니다. )".
이 튜토리얼의 운영 환경: Windows 7 시스템, ECMAScript 버전 6, Dell G3 컴퓨터.
모듈 개발은 ES6 모듈 사양에 정의된 es6에서 수행할 수 있습니다.
각 js 파일은 독립 모듈입니다.
import 키워드를 사용하여 다른 모듈 멤버를 가져옵니다.
공유 모듈 멤버는 내보내기 키워드
export
을 사용합니다. 모듈 기능은 주로 export
및 import
두 가지 명령으로 구성됩니다. export
명령은 모듈의 외부 인터페이스를 지정하는 데 사용되며, import
명령은 다른 모듈에서 제공하는 기능을 가져오는 데 사용됩니다. export
和import
。export
命令用于规定模块的对外接口,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 };
使用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
文件,它输出两个方法area
和circumference
。
// 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.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命令后面才不用加大括号
如果在一个模块中,先输入后输出同一个模块,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🎜< code>export 명령은 모듈의 최상위 수준에 있는 한 모듈의 어느 곳에나 나타날 수 있습니다. 블록 수준 범위에 있으면 오류가 보고되며 import
명령도 마찬가지입니다🎜🎜🎜🎜as🎜🎜🎜🎜일반적으로 에 의해 출력되는 변수는 내보내기
는 원래 이름이지만 as
키워드를 사용하여 🎜rrreee🎜🎜import 명령🎜🎜🎜export
명령을 사용하여 정의한 후 이름을 바꿀 수 있습니다. 모듈의 외부 인터페이스, 다른 js 파일은 <코드>import 명령을 통해 이 모듈을 로드할 수 있습니다🎜rrreee🎜입력 변수의 이름을 바꾸려면 import
명령을 사용하여 이름을 바꾸세요. 입력 변수 이름. 🎜rrreee🎜import
명령으로 입력된 변수는 모두 읽기 전용입니다. 그 본질은 입력 인터페이스이기 때문입니다. 즉, 모듈을 로드하는 스크립트에서 인터페이스를 다시 작성할 수 없습니다. import
뒤의 🎜rrreee🎜from
은 모듈 파일의 위치를 지정하며, 이는 .js
접미사일 수 있습니다. 생략 가능합니다. 경로 없이 모듈 이름만 있는 경우 JavaScript 엔진에 모듈의 위치를 알려주는 구성 파일이 있어야 합니다🎜🎜모듈의 전체 로딩🎜🎜로드할 특정 출력 값을 지정하는 것 외에도 다음을 수행할 수 있습니다. 또한 전체 로딩을 사용합니다. 즉, 별표(*)를 사용합니다. 모든 출력 값이 로드되는 개체를 지정합니다. 🎜🎜다음은 area
와 circumference
두 가지 메소드를 출력하는 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 'my_module' //可以简单理解为 import {foo, bar} from 'my_module' export {foo, bar}
上面代码中,export
和import
语句可以结合在一起,写成一行。但需要注意的是,写成一行以后,foo
和bar
实际上并没有导入当前模块,只是相当于对外转发了这两个接口,导致当前模块不能直接使用foo
和bar
.
import(specifier)
上面的代码中,import
函数的参数specifier
,指定所要加载的模块的位置。。import
命令能够接受什么参数,import()
函数就能接受什么参数,两者区别主要是后者为动态加载。
import()
返回一个 Promise 对象。下面是一个例子。
const main = document.querySelector('main'); 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!