最近写的文章有点多,主要关注前端的一些内容,把当前的理解做个简单的记录
如果要说模块,首先要说明这个东西解决了什么问题,其实我是觉得这个东西主要起两个作用
1、隔离 2、封装
首先说隔离,这也是大家常说的,小明声明一个变量,小李也声明一个同名的变量,造成命名冲突。有了模块之后,两个人写的东西是相互隔离的,就避免了命名冲突。
封装,也比较容易理解。比如说,我写了一个数学计算模块Math.js,包括 了各种运算方法,这样封装在一起层次就比较清晰
那么模块就主要起这两个作用
下面,我们开始慢慢的把思路缕清楚
现在的ES6非常强大,已经原生支持模块操作,也就是不再需要第三方的依赖,这是一个非常好的消息。在说明模块化之前,我首先想说一下JS的异步。
如果想把异步说清楚,需要专门列出一章,但是,至少其中的一些基本思路要了解。所谓异步,就是把某些操作挪到队列中,调用函数返回,当得到结果之后再回过来处理。
那么,我们需要知道的理论是,是谁支持异步?这个问题问的太蠢了,当然是浏览器V8引擎。有时候,为什么要说这些简单的问题,就是因为我们首先要把谁是谁这样的基本问题缕清楚
简单说,你写一个异步语句,是V8引擎能支持这么做才会异步。
好了,现在我们首先来个例子:
<input id='btn' type='button' value='复杂计算'/> <script> document.getElementById('btn').onclick=async evt=>{ //计算复杂的操作 } </script>
我们看这个例子,点击页面的某个按钮,在以前我们就是挂载一个click方法,时过境迁,到了ES6,我们可以在这个方法上面加一个async。这个关键字实在太强大了!
因为我们可以把这个方法异步处理,比方说,假如我们需要点击之后进行某个耗时或者CPU密集计算时,就不用