解析:
同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这
个进程将会一直等待下去,直到收到返回信息才继续执行下去;异步是指进程不需要一直等
下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进
行处理,这样可以提高执行的效率。
举个浏览器例子:普通 B/S 模式(同步)AJAX 技术(异步)
同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事
异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕
再举个生活的例子:大家联系的时候如果使用手机通话,那么只能跟一个人联系,过程中做
不了其他任何操作,如果使用短信或者聊天的方式,就可以同时跟很多人聊天,别人收到信
息后会回复,在回复之前还可以跟另外的人进行聊天。
document.write 和 innerHTML 的区别?
解析:
document.write是直接写入到页面的内容流,如果在写之前没有调用 document.open, 浏
览器会自动调用 open。每次写完关闭之后重新调用该函数,会导致页面被重写。
innerHTML 则是 DOM 页面元素的一个属性,代表该元素的 html内容。你可以精确到某
一 个 具 体 的 元 素 来 进 行 更 改 。 如 果 想 修 改 document 的 内 容 , 则 需 要 修 改
document.documentElement.innerElement。
两者都可动态包含外部资源如 JavaScript 文件
通过 document.write 插入<script></script>元素会自动执行其中的脚本;
大多数浏览器中,通过 innerHTML 插入<script></script>元素并不会执行其中的脚本
innerHTML 很多情况下都优于 document.write,其原因在于其允许更精确的控制要刷新
页面的那一个部分。
解析:
call,apply 都属于 Function.prototype 的一个方法,它是 JavaScript 引擎内在实现的,因
为属于 Function.prototype,所以每个 Function 对象实例(就是每个方法)都有 call,apply 属性。
既然作为方法的属性,那它们的使用就当然是针对方法的了,这两个方法是容易混淆的,因
为它们的作用一样,只是使用方式不同。
语法: foo.call(this, arg1,arg2,arg3) == foo.apply(this, arguments) == this.foo(arg1, arg2,
arg3);
相同点:两个方法产生的作用是完全一样的。
不同点:方法传递的参数不同,单个单数传入,另一个可以以数组方式传入
解析:
jQuery 是一个快速、简洁的 JavaScript 框架,是继 Prototype 之后又一个优秀的 JavaScript 代
码库(或 JavaScript 框架)。jQuery 设计的宗旨是”write Less,Do More”,即倡导写更少的
代码,做更多的事情。它封装 JavaScript 常用的功能代码,提供一种简便的 JavaScript 设计模
式,优化 HTML 文档操作、事件处理、动画设计和 Ajax交互。
jQuery UI 是建立在 jQuery JavaScript 库上的一组用户界面交互、特效、小部件及主题。
需求:实现一个页面操作不会整页刷新的网站,并且能在浏览器的前进,后退时正确响
解析:
应。给出你的技术实现方案?
用 cookie 或者 localStorage 来记录应用的状态即可,刷新页面时读取一下这个状态,然
后发送相应 ajax 请求来改变页面即可
HTML5 里引用了新的 API,就是 history.pushState 和 history.replaceState,就是通过这个
接口做到无刷新改变页面 URL 的
虽然 ajax可以无刷新改变页面内容,但无法改变页面 URL
其次为了更好的可访问性,内容发生改变后,改变 URL 的 hash。但是 hash 的方式不能
很好的处理浏览器的前进、后退等问题
有的浏览器引入了 onhashchange 的接口,不支持的浏览器只能定时去判断 hash 是否改
变
再有,ajax 的使用对搜索引擎很不友好,往往蜘蛛爬到的区域是空的
为了解决传统 ajax 带来的问题,HTML5 里引入了新的 API,即:history.pushState,
history.replaceState
可以通过 pushState 和 replaceState 接口操作浏览器历史,并且改变当前页面的 URL。
pushState是将指定的 URL 添加到浏览器历史里,replaceState 是将指定的 URL 替换当前
的 URL。
如何调用
var state = { title: title, url: options.url, otherkey:
othervalue};window.history.pushState(state, document.title, url);
state 对象除了要 title 和 url 之外,也可以添加其他的数据,比如:还想将一些发送 ajax
的配置给保存起来。
replaceState 和 pushState 是相似的,不需要多做解释。
如何响应浏览器的前进、后退操作
window 对象上提供了 onpopstate事件,上面传递的 state 对象会成为 event 的子对象,
这样就可以拿到存储的 title 和 URL 了。
window.addEventListener(‘popstate’, function(e){ if (history.state){ var state = e.state;
//do something(state.url, state.title); }}, false);
这样就可以结合 ajax 和 pushState 完美的进行无刷新浏览了。