公司名称:陕西无忧互联网络科技有限公司 公司规模:小型外包公司 公司地址:西安.雁塔区太白南路269号中天国际A座2308室 Q: 简述typeof与instanceof的区别? A:相同点:JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的。 typeof的定义和用法:返回值是一个字符串,用来说明变量的数据类型。 细节: (1)typeof 一般只能返回如下几个结果:number,boolean,string,function,object,undefined。 (2)typeof 来获取一个变量是否存在,如 if(typeof a!="undefined"){alert("ok")},而不要去使用 if(a) 因为如果 a 不存在(未声明)则会出错。 (3)对于 Array,Null 等特殊对象使用 typeof 一律返回 object,这正是 typeof 的局限性。 Instanceof定义和用法:instanceof 用于判断一个变量是否属于某个对象的实例。 Q: 如何理解闭包? A:1、定义和用法:当一个函数的返回值是另外一个函数,而返回的那个函数如果调用了其父函数内部的其它变量,如果返回的这个函数在外部被执行,就产生了闭包。 2、表现形式:使函数外部能够调用函数内部定义的变量。 变量的作用域要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域分类:全局变量和局部变量。 特点: 1)函数内部可以读取函数外部的全局变量;在函数外部无法读取函数内的局部变量。 2)函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量! 3、使用闭包的注意点 1)滥用闭包,会造成内存泄漏:由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。 2)会改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。 Q:开发过程中遇到的内存泄露情况,如何解决的? 1、定义和用法: 内存泄露是指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束。C#和Java等语言采用了自动垃圾回收方法管理内存,几乎不会发生内存泄露。我们知道,浏览器中也是采用自动垃圾回收方法管理内存,但由于浏览器垃圾回收方法有bug,会产生内存泄露。 2、内存泄露的几种情况: (1)、当页面中元素被移除或替换时,若元素绑定的事件仍没被移除,在IE中不会作出恰当处理,此时要先手工移除事件,不然会存在内存泄露。 Q:javascript面向对象中继承实现? A:面向对象的基本特征有:封闭、继承、多态。 在JavaScript中实现继承的方法: 1. 原型链(prototype chaining) 2. call()/apply() 3. 混合方式(prototype和call()/apply()结合) 4. 对象冒充 Q:$(this) 和 this 关键字在 jQuery 中有何不同? A:$(this) 返回一个 jQuery 对象,你可以对它调用多个 jQuery 方法,比如用 text() 获取文本,用val() 获取值等等。而 this 代表当前元素,它是 JavaScript 关键词中的一个,表示上下文中的当前 DOM 元素。你不能对它调用 jQuery 方法,直到它被 $() 函数包裹,例如 $(this)。 Q:简述同步和异步的区别 A:同步是阻塞模式,异步是非阻塞模式。 同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去; 异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。 Q:AJAX的工作原理: 1.创建ajax对象(XMLHttpRequest/ActiveXObject(Microsoft.XMLHttp)) 2.判断数据传输方式(GET/POST) 3.打开链接 open() 4.发送 send() 5.当ajax对象完成第四步(onreadystatechange)数据接收完成,判断http响应状态(status)200-300之间或者304(缓存)执行回调函数 Q:如何规避javascript多人开发函数重名问题 命名空间 封闭空间 js模块化mvc(数据层、表现层、控制层) seajs 变量转换成对象的属性 对象化 Q:请说出三种减低页面加载时间的方法 压缩css、js文件 合并js、css文件,减少http请求 外部js、css文件放在最底下 减少dom操作,尽可能用变量替代不必要的dom操作 Q:你所了解到的Web攻击技术 (1)XSS(Cross-Site Scripting,跨站脚本攻击):指通过存在安全漏洞的Web网站注册用户的浏览器 内运行非法的HTML标签或者JavaScript进行的一种攻击。 (2)SQL注入攻击 (3)CSRF(Cross-Site Request Forgeries,跨站点请求伪造):指攻击者通过设置好的陷阱,强制对已完成的认证用户进行非预期的个人信息或设定信息等某些状态更新。 Q: web前端开发,如何提高页面性能优化? A:内容方面: 1.减少 HTTP 请求 (Make Fewer HTTP Requests) 2.减少 DOM 元素数量 (Reduce the Number of DOM Elements) 3.使得 Ajax 可缓存 (Make Ajax Cacheable) 针对CSS: 1.把 CSS 放到代码页上端 (Put Stylesheets at the Top) 2.从页面中剥离 JavaScript 与 CSS (Make JavaScript and CSS External) 3.精简 JavaScript 与 CSS (Minify JavaScript and CSS) 4.避免 CSS 表达式 (Avoid CSS Expressions) 针对JavaScript : 1. 脚本放到 HTML 代码页底部 (Put Scripts at the Bottom) 2. 从页面中剥离 JavaScript 与 CSS (Make JavaScript and CSS External) 3. 精简 JavaScript 与 CSS (Minify JavaScript and CSS) 4. 移除重复脚本 (Remove Duplicate Scripts) 面向图片(Image): 1.优化图片 2 不要在 HTML 中使用缩放图片 3 使用恰当的图片格式 4 使用 CSS Sprites 技巧对图片优化 Q:浏览器是如何渲染页面的? A:渲染的流程如下: 1.解析HTML文件,创建DOM树。 自上而下,遇到任何样式(link、style)与脚本(script)都会阻塞(外部样式不阻塞后续外部脚本的加载)。 2.解析CSS。优先级:浏览器默认设置<用户设置<外部样式<内联样式<HTML中的style样式; 3.将CSS与DOM合并,构建渲染树(Render Tree) 4.布局和绘制,重绘(repaint)和重排(reflow)
|