笔记整理4


1、线程与进程的区别?
   一个程序至少有一个进程,一个进程至少有一个线程。线程的划分尺度小于线程,使得多线程程序的并发性高。进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大提高了程序的运行效率。
   线程在执行过程中与进程还是有区别的,每个独立的线程有一个程序运行的入口、顺序执行序列的出口,但是线程不能狗独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
   从逻辑角度来看,多线程的意义在于一个应用程序,有多个执行部分可以同时执行。但是操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度的管理伊利资源分配。至九十进程与线程的重要区别。
2、减少页面加载时间的方法?
   a、优化图片
   b、图像格式的选择(GIF:提供的颜色较少,可用在一些对颜色要求不高的地方)
   c、优化CSS(压缩合并css,如margin-top,margin-left…)
   d、网址后加斜杠(如www.campr.com/目录,会判断这个“目录是什么文件类型,或者是目录。)
   e、标明高度和宽度(如果浏览器没有找到这两个参数,它需要一边下载图片一边计算大小,如果图片很多,浏览器需要不断地调整页面。这不但影响速度,也影响浏览体验。当浏览器知道了高度和宽度参数后,即使图片暂时无法显示,页面上也会腾出图片的空位,然后继续加载后面的内容。从而加载时间快了,浏览体验也更好了。)
   f、减少http请求(合并文件,合并图片)。
3、XHTML的局限有哪些?
   所有的 XHTML 元素都必须被正确地嵌套,XHTML 必须拥有良好的结构,所有的标签必须小写,并且所有的 XHTML 元素必须被关闭。所有的 XHTML 文档必须拥有 DOCTYPE 声明,并且 html、head、title 和 body 元素必须存在。虽然代码更加的优雅,但缺少容错性,不利于快速开发。
4、什么是SVG?
   a、SVG 指可伸缩矢量图形 (Scalable Vector Graphics)
   b、SVG 用来定义用于网络的基于矢量的图形
   c、SVG 使用 XML 格式定义图形
   d、SVG 图像在放大或改变尺寸的情况下其图形质量不会有所损失
   e、SVG 是万维网联盟的标准
   f、SVG 与诸如 DOM 和 XSL 之类的 W3C 标准是一个整体
5、JavaScript宿主对象和原生对象的区别?
   a、原生对象
ECMA-262 把本地对象(native object)定义为“独立于宿主环境的 ECMAScript 实现提供的对象”。
“本地对象”包含哪些内容:Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError。
由此可以看出,简单来说,本地对象就是 ECMA-262 定义的类(引用类型)。
   b、内置对象
ECMA-262 把内置对象(built-in object)定义为“由 ECMAScript 实现提供的、独立于宿主环境的所有对象,在 ECMAScript 程序开始执行时出现”。这意味着开发者不必明确实例化内置对象,它已被实例化了。
同样是“独立于宿主环境”。根据定义我们似乎很难分清“内置对象”与“本地对象”的区别。而ECMA-262 只定义了两个内置对象,即 Global 和 Math (它们也是本地对象,根据定义,每个内置对象都是本地对象)。如此就可以理解了。内置对象是本地对象的一种。
   c、宿主对象
何为“宿主对象”?主要在这个“宿主”的概念上,ECMAScript中的“宿主”当然就是我们网页的运行环境,即“操作系统”和“浏览器”。
所有非本地对象都是宿主对象(host object),即由 ECMAScript 实现的宿主环境提供的对象。所有的BOM和DOM都是宿主对象。因为其对于不同的“宿主”环境所展示的内容不同。其实说白了就是,ECMAScript官方未定义的对象都属于宿主对象,因为其未定义的对象大多数是自己通过ECMAScript程序创建的对象。
6、call和.apply的区别是什么?
   a、call方法:
语法:call(thisObj,Object)
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
说明:call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
   b、apply方法:
语法:apply(thisObj,[argArray])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
说明:如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
   c、对于apply和call两者在作用上是相同的,但两者在参数上有以下区别:
对于第一个参数意义都一样,但对第二个参数:apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。如 func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,[var1,var2,var3])同时使用apply的好处是可以直接将当前函数的arguments对象作为apply的第二个参数传入。
7、描述事件冒泡机制?
   a、冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。
   b、捕获型事件:事件从最不精确的对象(document 对象)开始触发,然后到最精确
8、==和===有什么不同?
   当进行双等号比较时候: 先检查两个操作数数据类型,如果相同, 则进行===比较, 如果不同, 则愿意为你进行一次类型转换, 转换成相同类型后再进行比较, 而===比较时, 如果类型不同,直接就是false.
9、document.onload和document.ready两个事件的区别?
   页面加载完成有两种事件,一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件),二是onload,指示页面包含图片等文件在内的所有元素都加载完成
10、什么是闭包,如何使用它,为什么要使用它?
   a、闭包就是能够读取其他函数内部变量的函数。由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。
   b、所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
   使用闭包的注意点:
由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

猜你喜欢

转载自www.cnblogs.com/a123A/p/10117632.html