export / import 温故而知新
2024-09-17 00:37:03
认知一: 导出的对象被修改,依然会影响原来的对象。
仔细想想这是理所当然的事(说明导出的依然是对象指向内存的地址,所以通常还需要结合深拷贝使用)
/**
export const state = {
select: 0
} export const logstate = () => {
console.log('what the fuck?', state)
}
*/
import { state, logstate } from './lib'
state.select =
console.log('fuckyou', state) // fuckyou { select: 110 }
logstate() // what the fuck? { select: 110 }
认知二:无论是 let 还是 const ,导出的变量都无法修改
/**
export let val = 0
*/
import { val } from './lib'
val = // 报错: "val" is read-only
认知三: import 无法解构 export default {...} 导出的对象,哪怕他真的是导出一个对象!
我们知道,如果我们用常规的 require 导入 export default {...},其实还有一层 default 的:
/**
const state = {
select: 0
} const logstate = () => {
console.log('what the fuck?', state)
} export default {
state,
logstate
}
*/
const what = require('./lib');
console.log(what); // { default: { state: { select: 0 }, logstate: [Function: logstate] } }
而神奇的是,如果使用 Import 就会自动将这一层多余的default移出:
import what from './lib'
console.log(, what) // { state: { select: 110 }, logstate: [Function: logstate] }
但尽管如此,我们依然无法使用解构:
import what from './lib'
import { state, logstate } from './lib'
console.log(state, logstate) // undefined undefined
如果实在想使用解构,只能用最初的require方法了,但要记得加上 .default 哦:
const { state, logstate } = require('./lib').default
console.log(state, logstate) // { select: 0 } [Function: logstate]
最新文章
- C#+ArcEngine10.0+SP5实现鼠标移动动态显示要素属性信息
- angularjs中ng-controller中绑定对象
- Oracle 新手问答
- oracle start with connect by prior 递归查询
- poj3692 最大点权独立集/最大独立集
- OC10_数组的内存管理
- canvas总结:元素大小与绘图表面大小
- HMM模型详解
- Servlet、SPringMVC、Struts等防止表单反复提交的多种处理方法
- NodeJS+Express+MongoDB 简单个人博客系统【Study笔记】
- 改造继续之eclipse集成tomcat开发spring mvc项目配置一览
- Linux-pthread如何设置线程的优先级
- vue自定义指令用法总结及案例
- xpath路径前可用方法测试
- 《Python》hashlib模块、configparser模块、logging模块
- (十一) 整合spring cloud云架构 - SSO单点登录之OAuth2.0登录流程(2)
- jQuery队列(三)
- time out 超时
- [PHP] 超全局变量$_FILES上传文件
- 第三百零四节,Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器