十五的学习日记20160930
JavaScript
- jquery源代码分析
- 发起ajax请求的几个要点
- 基础:
- 前端: 构造头,构造体,发送包
- 后端: 判断来源请求,构造头,构造体,返回包
- 同源:
- 跨域:
- 1jquery自带方法
- 2服务端允许接受跨域设置
- 3服务器代理
- 操作:
- JS引擎不会单独运行,他会在一个宿主环境中运行,这个环境对大多数开发者来说就是web浏览器.而且在过去的几年(也不仅仅是过去几年),JS超出了浏览器到了其他领域.比如服务器,通过nodejs,实际上近年来JavaScript已经嵌入到了各种设备,从机器人到智能灯泡都有.
- 在这所有的环境中,都有一个普遍的"线程"(这是一个对异步的微妙称呼),这类"线程"都有一个机制,能在每次调用JS引擎的时候,随时间执行你的多个语句块,这个机制就叫做"事件循环".
- 换句话说,JS引擎内部没有感知时间先后的能力,而是一个按需执行任意JS片段的环境.而安排"事件"(js执行代码)则总是由JS外部环境来完成.
- 举个例子,当你的JS程序创建了一个Ajax请求,以从服务器获取一些数据,你设置了"响应"代码于一个函数中(通常称为回调函数),然后JS引擎告诉宿主环境:"嘿哥们儿, 我要暂停一下执行跟你说件事儿,当你无论何时完成了网络请求,并且获得了一些数据,请务必以调用这个函数返回给我."
- 然后浏览器就开始监听网络响应,当确实获得了一些数据时, 它就会安排一个回调函数放入事件循环中等待调用.
- 所以事件循环到底是什么?用一段伪代码来告诉你吧.
// eventloop 是一个扮演栈的数组(先进先出);
var eventloop=[];
var event;
//死循环
while(true){
//提供一个时刻
if(eventloop.length>0){
//获取下一个栈中的事件
event=eventloop.shift();
//执行该事件
try{
event();
}
catch(err){
reportError(err);
}
}
}
- 有一点很重要,就是
setTimeout
函数不会把你的回调函数放入事件循环, 他会做的是设置一个计时器, 当到达指定时间, 宿主环境就会把你的回调函数放入到事件循环中, 如此一来, 将来的tick才会把他取出并执行.
- ES6的job queue.定义了一种异步的情况,他总是在当前tick的最后插入语句.