zoukankan      html  css  js  c++  java
  • 十五的学习日记20160930-jquery/ajax/JS引擎/job queue

    十五的学习日记20160930

    JavaScript

    1. jquery源代码分析
    2. 发起ajax请求的几个要点
      • 基础:
        • 前端: 构造头,构造体,发送包
        • 后端: 判断来源请求,构造头,构造体,返回包
      • 同源:
      • 跨域:
        • 1jquery自带方法
        • 2服务端允许接受跨域设置
        • 3服务器代理
      • 操作:
        • 状态改变事件监听.
    3. JS引擎不会单独运行,他会在一个宿主环境中运行,这个环境对大多数开发者来说就是web浏览器.而且在过去的几年(也不仅仅是过去几年),JS超出了浏览器到了其他领域.比如服务器,通过nodejs,实际上近年来JavaScript已经嵌入到了各种设备,从机器人到智能灯泡都有.
    4. 在这所有的环境中,都有一个普遍的"线程"(这是一个对异步的微妙称呼),这类"线程"都有一个机制,能在每次调用JS引擎的时候,随时间执行你的多个语句块,这个机制就叫做"事件循环".
    5. 换句话说,JS引擎内部没有感知时间先后的能力,而是一个按需执行任意JS片段的环境.而安排"事件"(js执行代码)则总是由JS外部环境来完成.
    6. 举个例子,当你的JS程序创建了一个Ajax请求,以从服务器获取一些数据,你设置了"响应"代码于一个函数中(通常称为回调函数),然后JS引擎告诉宿主环境:"嘿哥们儿, 我要暂停一下执行跟你说件事儿,当你无论何时完成了网络请求,并且获得了一些数据,请务必以调用这个函数返回给我."
    7. 然后浏览器就开始监听网络响应,当确实获得了一些数据时, 它就会安排一个回调函数放入事件循环中等待调用.
    8. 所以事件循环到底是什么?用一段伪代码来告诉你吧.
    // eventloop 是一个扮演栈的数组(先进先出);
    var eventloop=[];
    var event;
    //死循环
    while(true){
        //提供一个时刻
        if(eventloop.length>0){
    	    //获取下一个栈中的事件
    	    event=eventloop.shift();
    	    //执行该事件
    	    try{
    			event();
    		}
    		catch(err){
    			reportError(err);
    		}    
        }
        
    }
    
    1. 有一点很重要,就是setTimeout函数不会把你的回调函数放入事件循环, 他会做的是设置一个计时器, 当到达指定时间, 宿主环境就会把你的回调函数放入到事件循环中, 如此一来, 将来的tick才会把他取出并执行.
    2. ES6的job queue.定义了一种异步的情况,他总是在当前tick的最后插入语句.
  • 相关阅读:
    认识hasLayout——IE浏览器css bug的一大罪恶根源 转
    web网站p教程 转
    可遇不可求的Question之SQLServer的INSERT ON DUPLICATE KEY UPDATE语法篇
    可遇不可求的Question之Protoc.exe无法编译proto文件篇
    python各个版本的下载地址
    可遇不可求的Question之WCF发布无法运行篇
    [转]理解JSON:3分钟课程
    可遇不可求的Question之Silverlight发布IIS设置篇
    可遇不可求的Question之C#中的匿名事件导致内存泄露的解决篇
    可遇不可求的Question之mysql连接数暴增的解决方法篇
  • 原文地址:https://www.cnblogs.com/always-naive/p/5933811.html
Copyright © 2011-2022 走看看