博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
填坑-十万个为什么?(19)
阅读量:7221 次
发布时间:2019-06-29

本文共 2933 字,大约阅读时间需要 9 分钟。

简介:很多概念不清或忘记,重新构建自己的知识体系。每天问自己1~多个问题。我是菜鸟 成为大神之路!

1.什么是异步操作?异步操作有哪些?

JS因为是单线程的,所以在执行事务的时候,往往会因为某个事务的延迟,而导致服务器假死,这时候异步编程就显的格外重要,但是异步编程一般理解为回调函数callback,典型的就是node,回调函数的层层嵌套又导致程序过于冗余,因为闭包的存在,导致了内存的泄露或者误改上一层回调函数的参数

①回调函数
`在f1执行完之后再执行f2`var func1=function(callback){    console.log(1);    (callback && typeof(callback)==='function') && callback();}func1(func2);var func2=function(){    console.log(2);}`Ajax`$.ajax({    url:"/getmsg",    type: 'GET',    dataType: 'json',    success: function(ret) {        if (ret && ret.status) {            //        }    },    error: function(xhr) {        //    }})复制代码
②事件监听

通过事件机制,实现代码的解耦。js处理DOM交互就是采用的事件机制,我们这儿只是实现一些自定义的事件而已。JS中已经很好的支持了自定义事件,如:

//新建一个事件var event=new Event('Popup::Show');//dispatch the eventelem1.dispatchEvent(event)//listen for this eventelem2.addEventListener('Popup::Show',function(msg){},false)`添加事件监听的方法`element.addEventListener('click', funEven, false);element.attachEvent('onclick', funEven);element.onclick = funEven;第14天的内容 https://juejin.im/post/5c28761b5188250baa55bcb7复制代码
③ 观察者模式,也叫订阅发布模式

多个观察者可以订阅同一个主题,主题对象改变时,主题对象就会通知这个观察者

其中步骤包括,订阅、发布、退订;先订阅(subscribe)一个主题对象,根据主题对象发布(publish)内容,期间也退订(unsubscribe)主题对象,一旦退订就无法再次发布
可以把订阅一个主题对象理解成监听一个事件
观察者模式的一个特点就是一旦主题事件一改变,就会通知整个观察者;观察者模式还可以计算出订阅事件的个数

//发布-订阅//有个消息池,存放所有消息let pubsub = {};(function(myObj) {    topics = {}    subId = -1;    //发布者接受参数(消息名称,参数)    myObj.publish = function(topic, msg) {            //如果发布的该消息没有订阅者,直接返回            if (!topics[topic]) {                return            }            //对该消息的所有订阅者,遍历去执行各自的回调函数            let subs = topics[topic]            subs.forEach(function(sub) {                sub.func(topic, msg)            })        }    //订阅者接受参数:(消息名称,回调函数)    myObj.subscribe = function(topic, func) {        //如果订阅的该事件还未定义,初始化        if (!topics[topic]) {            topics[topic] = []        }        //使用不同的token来作为订阅者的索引        let token = (++subId).toString()        topics[topic].push({                token: token,                func: func            })        return token    }    myObj.unsubscribe = function(token) {        //对消息列表遍历查找该token是哪个消息中的哪个订阅者        for (let t in topics) {            //如果某个消息没有订阅者,直接返回            if (!topics[t]) {                return }            topics[t].forEach(function(sub,index) {                if (sub.token === token) {                    //找到了,从订阅者的数组中去掉该订阅者                    topics[t].splice(index, 1)                }            })        }    }})(pubsub)let sub1 = pubsub.subscribe('Msg::Name', function(topic, msg) {    console.log("event is :" + topic + "; data is :" + msg)});let sub2 = pubsub.subscribe('Msg::Name', function(topic, msg) {    console.log("this is another subscriber, data is :" + msg)});pubsub.publish('Msg::Name', '123')pubsub.unsubscribe(sub2)pubsub.publish('Msg::Name', '456')复制代码
④promise

第18天的内容

⑤Generator函数

第20天学习

⑥es7语法糖async/await

第20天学习

文章推荐

转载于:https://juejin.im/post/5c2eace051882525e90db6d7

你可能感兴趣的文章
Squid 日志分析 和反向代理
查看>>
Hadoop的安装及一些基本概念解释
查看>>
大容量分区命令parted
查看>>
从输入 URL 到页面加载完成的过程中都发生了什么事情?
查看>>
实例讲解JQuery中this和$(this)区别
查看>>
centos 7 静态ip地址模板
查看>>
影响系统性能的20个瓶颈
查看>>
shell的详细介绍和编程(上)
查看>>
软件开发性能优化经验总结
查看>>
面试题编程题05-python 有一个无序数组,如何获取第K 大的数,说下思路,实现后的时间复杂度?...
查看>>
kendo grid序号显示
查看>>
Spring 教程(二) 体系结构
查看>>
Indexes
查看>>
2.Web中使用iReport 整合----------创建html格式的
查看>>
异常备忘:java.lang.UnsupportedClassVersionError: Bad version number in .class file
查看>>
最全三大框架整合(使用映射)——applicationContext.xml里面的配置
查看>>
初步理解Java的三大特性——封装、继承和多态
查看>>
知识点积累(一)
查看>>
iphone-common-codes-ccteam源代码 CCFile.m
查看>>
python:浅析python 中__name__ = '__main__' 的作用
查看>>