前端面试涉及知识点整理(持续更新)
-
export 和 export default的区别:
export:export在一个文件中可以有多处,然后在import的时候要加上’’{}’'来引入,且变量名和export出来的名字要一样。
export default:export default在一个文件中只能有一个,且不需要加上大括号,但是通常情况我们是与export default暴露出来的文件的名字是一样的,我们可以将export default看成export 然后加上default,default相当于暴露的名字,所以引入的时候可以import {default as *} from …。此处小编就会想到哈 commonJs和 es6的import和require那些机制有什么区别?
1. 首先就是CommonJs模块输出他输出的是一个值得复制,ES6模块输出的是值得引用
2. CommonJs模块是运行时加载,ES6模块是编译时输出接口
下面我们来分析一下第一点:如果说CommonJs输出的是值得复制,那么一旦输出一个值,模块内部得变化就不会影响到这个值,相反的是ES6模块输出的是引用,所以模块内部值得变化,会影响到其他值的变化。下面我们来看一下代码:
CommonJs:
var counter = 3
function addCounter() {
counter++
}
module.exports = {
counter: counter,
addCounter: addCounter
}
//引入
var mod = require('./lib')
console.log(mod.counter) //3
mod.addCounter()
console.log(mod.counter) //3
ES6:
export let counter = 3
export function addCounter() {
counter++
}
// 引入
import { counter, addCounter } from './lib'
console.log(counter) //3
addCounter()
console.log(counter) //4
观察上面代码,我们还可以发现就是module.exports暴露出去是一个对象,然后相当于在用的时候,相当于在用这个对象,这个对象在脚本运行结束时才会生成,而在ES6模块中则是按需加载,在代码解析阶段就会生成!!