ES6模块中export、import命令和generator的使用
export和import。export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能。
一、export命令
一个模块就是一个独立的文件。该文件内部的所有变量,
外部无法获取。如果你希望外部能够读取模块内部的某个变量,
就必须使用export关键字输出该变量。
输出变量
export var firstName = 'Michael';
export var lastName = 'Jackson';
export var year = 1958;
var firstName = 'Michael';
var lastName = 'Jackson';
var year = 1958;
export { firstName, lastName, year };
优先考虑使用这种写法
输出函数或者类
export 输出的变量就是本来的名字,但是可以使用as关键字重命名。
function v1() { ... }
function v2() { ... }
export {
v1 as streamV1,
v2 as streamV2,
v2 as streamLatestVersion
};
二、 export default 命令
为模块指定默认输出。
exrot default Dog (默认导出)
import Dog,{ name,fn} from './be.js'
三、import 命令
import 命令
import { firstName, lastName, year } from './profile.js';
可以通过import命令加载这个模块。
import { firstName, lastName, year } from './profile.js';
import命令接受一对大括号,里面指定要从其他模块导入的变量名。
大括号里面的变量名,必须与被导入模块(profile.js)对外接口的名称相同。
import命令输入的变量都是只读的,因为它的本质是输入接口。
也就是说,不允许在加载模块的脚本里面,改写接口。
模块的整体加载
除了指定加载某个输出值,还可以使用整体加载,即用星号(*)指定一个对象,
所有输出值都加载在这个对象上面。
import * as circle from './circle';
对象里的内容,不允许运行时改变
四、generator
generator
function* helloWorldGenerator() {
yield 'hello';
yield 'world';
return 'ending';
}
var hw = helloWorldGenerator();
执行 hw.next( )方法,,会得到
hw.next()
// { value: 'hello', done: false }
hw.next()
// { value: 'world', done: false }
hw.next()
// { value: 'ending', done: true }
hw.next()
// { value: undefined, done: true }
done变为true是结束
可使用 for of 循环直接去遍历hw
常见面试题::利用迭代对对象进行遍历
五.遍历对象
<body>
<p>点击</p>
<script>
var oP = document.querySelector('p');
var obj = {
name: '小明',
age: 15,
wight: 120
};
// 创建一个生成器
function* fn(obj) {
var key = Object.keys(obj);
for (var i = 0; i < key.length; i++) {
yield [key[i], obj[key[i]]]
}
}
var it = fn(obj);
// 遍历可迭代对象
// for (var [k, v] of it) {
// console.log(k, v);
// }
oP.onclick = function() {
var h = it.next();
if (!h.done) {
oP.innerText = h.value;
} else {
oP.innerText = '已结束'
}
}
</script>
</body>