proxy代理坑varobj={index:'index'}varnewObj=newProxy(obj,{get:(target,key)=>{console.log(target)//{index:"index"}returntarget[key]+123;//returntarget.key如果返回这个,访问newObj.index会报undefined}})newObj.index//index123在实践中遇到我遇到过这样的问题,但具体原因还不清楚。谁要大家在底下留言,es6和commonJs中modules的区别,不胜感激。ES6模块的设计思想是尽量静态,这样编译的时候就可以确定。模块依赖关系,以及输入和输出变量。CommonJS模块是一个对象,输入时必须查找对象属性;ES6模块不是对象,而是通过export命令显式指定输出代码,然后通过import命令导入。```//CommonJS模块:该导入方法只能在运行时加载,并导入整个fs对象,不能静态加载let{stat,exists,readFile}=require('fs');//ES6模块:es6模块中每个组件都是独立的,这样import只导入对应的组件,可以静态加载(这样就无法动态加载需要的模块,实现模块的按需加载)import{stat,exists,readFile}from'fs';```导入命令接受一对花括号,它指定要从其他模块导入的变量名。大括号内的变量名必须与导入模块(profile.js)的对外接口名相同。vara={name:'zhangsan',sex:'man'};export{personasa};import{personXasperson}form'./person.js';import命令有自动提升的功能,会自动提升到文件的最前面,所以只要我们在文件中导入就可以使用,不需要考虑引入的位置,相反让控制台日志(personX);//{姓名:'张三',性别:'男'};像这样不会报错import{personXasperson}form'./person.js';import是静态执行的,所以在引入组件的过程中可以混入任何表达式//errorif(x===1){import{foo}from'module1';}else{import{foo}from'module2';}import'lodash'//这将直接执行模块。当import命令和require命令同时存在时,import命令会先执行,因为import是静态解析阶段执行的,所以是最早执行的一个模块。import和export结合使用导出默认es6;以便暴露在另一个文件中时可以导入anyNamefrom'es6';import()类似于commonJs的require()。不同的是前者是异步执行的,而后者是同步执行的。扩展module.exports==export.default,这样在暴露和导入的时候可以任意指定模块名。exportsexposed和imported时,只能用{}来包裹内部组件
