开发规范:
- 声明式函数应设置为常量。
- 对象尽量静态化,一旦设置不得随意添加新的属性,或者使用Object.assign()
- 默认导出一个对象用大驼峰
- 函数的默认值:
function test(a, b, { bool = false } = {}) {
console.log(bool)
}
基础知识:
1. es6的顶层指向 undefined
2.module 导出
2.1 export v1 as version1
2.2 export var v1 = 2;
2.3 var m = 1; export { m } || export { m as mode };
3.
commonJs 输出的是值得拷贝,运行时加载
es6module 输出的是值得引用,编译时加载,必须引入在模块的顶层(会提升到整个模块的头部并首先执行),处于块级作用于内会报错。
4.不会报错,编译时加载。
foo();
import { foo } from 'utils.js';
5. import 语句会执行所加载的模块,只执行,不会输入任何值。
import 'loadsh';
import 'loadsh'; // 只执行一次
6.require 和import 加载方式不同,不要放在同一个模块。
eg:
require('core-js/modules/es6.symbol');
import React from 'react'; // 不一定得到预期的结果
7.
import { a, b } from './circle' 等同于 import * as mode from './circle'
mode.a/mode.b
由于是编译时加载不允许运行时改变。mode.a = 10
8. export 和 import 的复合写法
import { foo, bar } from '.my_module'; export { foo, bar };
等价于 export { foo, bar } from 'my_module';
9. 更改接口名: export { foo as myFoo } from 'my_module';
10. 整体输出 export * from 'my_module';
11. export default 一个模块只能有一个默认输出。
12. export Foo, { bar } from 'Module'
13. export * 会忽略要输出文件的默认方法;
eg1:
// utils.js
export let t1 = () => { console.log('t1') }
export let t2 = () => { console.log('t2') }
export default function() { console.log('default') }
// 使用
import * as mode from './utils.js';
mode => t1 t2 default
---------------------------------------------------------
eg2:
// utils.js
utils.js
export let t1 = () => { console.log('t1') }
export let t2 = () => { console.log('t2') }
export default function() { console.log('default') }
// 引入index.js
export * from 'utils.js'
// index 引入要使用的模块
import * as mode from 'index.js';
mode => t1 t2
14.const 声明的常量只在当前代码块内有效。
15.import(specifier)动态加载,返回promise异步加载. 等同于require(xxxx) 同步加载
eg1:
const main = document.querySelector('main');
import(`./section_modules/${pathName}.js`)
.then(res => {})
.catch(err => {})
Promise.all([ import('./modeA'), import('./modeB'), import('./modeC') ])
.then(res => {})
.catch(err => {})