马上要换工作了,感觉自己很多东西都只知道怎么弄,不会查百度,不知道原理,网上整理了面试题,作为复习资料。 首先是各大公司的面试题 原始地址 http://www.jackpu.com/2016ge-da-hu-lian-wang-gong-si-qian-duan-mian-shi-ti-hui-zong/ 百度 1 写出JavaScript运行结果 for(var i=0; i<10; i++){} alert(i); 1 1 answer: 10 2 Cookie、sessionStorage、localStorage的区别 answer: SessionStorage 和 localStorage 是HTML5 storage API 提供的, 可以把数据保存在本地,避免了数据在浏览器和服务器之间不必要的通信。 sessionStorage,localStorage, cookie 都是在浏览器存储的数据。 不同: cookie数据始终在同源http中携带,即使不需要,也会在浏览器和服务器间来回传递。Storage只存在本地。 cookie数据有路径概念,可以限制cookie只能在某路径下。 大小不同 cookie:4k Storage:5M 有效期不同 sessionStorage: 仅在当前浏览器关闭前有效 localStorage:始终有效 cookie:过期之前有效 作用域不同 sessionStorage在打开的不同浏览器窗口不共享,即使同一页面 localStorage 在同源页面共享 cookie 同源页面共享 3 JSONP原理 answer: Ajax存在不能跨域请求数据的问题。而Web上调用js是不受跨域影响的。因为JSON数据格式恰好被Js支持,web客户端通过调用跨域服务器上动态生成的Js,从而达到跨域请求到JSON包的需求。 为了便于客户端调用JSON数据,形成了非正式的传输协议,也就是JSONP。 客户端传一个callback参数给跨域服务器,跨域服务器返回一个以callback为函数名包裹的JSON数据,这样客户端就可以处理跨域得到的JSON数据了。 4 简述css盒模型 answer: 一个盒子包括 内容 填充 边框 边界,而盒子模型包括这些属性,外边距,边框,内边距,内容。 5 说说get和post请求的区别 answer: get: 将请求携带的参数直接拼接在url后面,传送的体积小 post: 将请求写在body里,传送的体积大。安全。 一般get用于获取数据,post是将数据传给服务器,进行修改。 这里推荐一篇文章,也细致的讲了区别,值得思考。 http://www.nowamagic.net/librarys/veda/detail/1919 6 运行结果 var a = {n: 1} var b = a; a.x = a = {n: 2}; console.log(a.x); console.log(b.x); 1 2 3 4 5 1 2 3 4 5 answer: (a.x)->undefined (b.x)->[object Object ] 解析: http://www.bubuko.com/infodetail-712767.html 本题主要考查了js引用模式。 var a = {n: 1} var b = a; 这两行代码 a 指向了一个对象 A{n:1} b 也指向了对象A{n:1} 下一行代码很关键 a.x = a = {n: 2}; 由于js赋值运算是从右往左的,但是 . 的运算等级最高, 所以 a.x 为对象A 新增了属性 x:undefined。 同时,由于b也指向对象A,所以b.x也是undefined。接着,由于从右往左的特性,先执行a={n:2},这时a指向了对象B{n:2}。 接着执行 a.x=a 很多人会认为这里是“对象B也新增了一个属性x,并指向对象B自己” 但实际上并非如此, 由于( . 运算符最先计算)一开始js已经先计算了a.x,便已经解析了这个a.x是对象A的x,所以在同一条公式的情况下再回来给a.x赋值,也不会说重新解析这个a.x为对象B的x。 所以 a.x=a 应理解为对象A的属性x指向了对象B. 这时,对象A: {n:1 x:对象B} 对象B: {n:2} 所以结果 a.x是输出对象B的x属性,由于遍历到顶端,也没有这个属性,所以输出undefined。 而b.x是输出的对象B。注意这里的[object Object]可不是2个对象的意思,对象的字符串形式,是隐式调用了Object对象的toString()方法,形式是:”[object Object]”。所以[object Object]表示的就只是一个对象罢了。 7 说说类的创建、继承和闭包 answer: 建议阅读javascript高级程序设计4-7章。 创建类:factory法,constructor法,prototype法,prototype+constructor结合,动态prototype法。 继承类: 原型链继承 构造继承 实例继承 拷贝继承 组合继承 寄生组合继承 闭包: 在函数外访问函数内变量的方法 8 是否有设计过通用的组件? 请设计一个 Dialog(弹出层) / Suggestion(自动完成) / Slider(图片轮播) 等组件,你会提供什么接口?调用过程是怎样的?可能会遇到什么细节问题? answer: 具体靠自己经验了。 9 一个页面从输入 URL 到页面加载完的过程中都发生了什么事情?越详细越好(考察知识广度) answer: 输入地址-》浏览器查找域名的IP地址(DNS查找)-》浏览器向web服务器发送请求-》服务器永久重定向回应-》浏览器跟踪重定向地址-》服务器处理请求-》服务器返回http响应-》浏览器显示html-》浏览器发送请求获取在html中嵌套的资源-》浏览器发送异步请求 10 什么是 “use strict”? 使用它的好处和坏处是什么? answer: 使用严格模式。消除语法不严谨的地方,保证代码安全,增进代码速度。缺点不知道,失去代码灵活性算吗?