JavaScript习题练习2

1.apply和call的用途是什么?有什么区别?

解析:

  • call , apply都属于Function.prototype的一个方法,它是Jav
    aScript引擎内在实现的,因为属于Function.prototype ,所以
    每个Function对象实例(就是每个方法)都有call , apply属性。既
    然作为方法的属性,那它们的使用就当然是针对方法的了,这两
    个方法是容易混淆的,因为它们的作用一样,只是使用方式不
    同。
  • 语法: focall(this, arg1 arg2,arg3) == foo.apply(this, arg
    uments) == this.foo(arg1, arg2, arg3);
  • 相同点:两个方法产“生的作用是完全一样的。
  • 不同点:方法传递的参数不同。

2.简述js闭包理解及其优缺点?

解析:
什么是javascript闭包?
javascript允许使用内部函数,内部函数可以访问它们所在的外
部函数中声明的所有局部变量、参数和声明的其他内部函数。当
其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。
闭包的好处:
(1 )不增加额外的全局变量,
( 2 )执行过程中所有变量都是在匿名函数内部。
闭包的缺点:
(1 )由于闭包会使得函数中的变量都被保存在内存中,内存消
耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE
中可能导致内存泄露。解决方法是,在退出图数之前,将不使用
的局部变量全部删除。
(2 )闭包会在父函数外部,改变父函数内部变量的值。所以,
如果你把父函数当作对象( object )使用,把闭包当作它的公用
方法( Public Method ) , 把内部变量当作它的私有属性( priv
ate value) , 这时一定要小心。不要随便改变父函数内部变量的值。

3.function a(){return 1;} var a = 10;alert(a);弹出框的值为:

解析:10

4.function a(){return 1;} var a;alert(a);弹出框的值为:

解析:一个函数Object

5.JavaScript如果实现继承?

解析:通过原型和构造器;

6.如何创建一个对象?

解析:

function Person(name,age){
this.name=name;
this.age=age;
this.sing=function(){
  alert(this.name)
}

7.谈谈对this对象的理解

解析:this是一个关键字,随着函数使用场合不同,this的值会发生变化,但是有一个原则:this指向的是调用函数的那个对象;this一般情况下是全局对象,如果作为方法调用,那么this就是指这个对象;

8.JavaScript垃圾回收原理

  • 在JavaScript中,如果一个对象不再被引用,那么这个对象就会被GC回收;
  • 如果两个对象相互引用,而不再被第三者所引用,那么这两个互相吸引的对象也会被回收;

9.谈谈对作用域链的理解

解析:作用域链是保证执行环境里有权访问的变量和函数是有序的,作用域链的变量只能向上访问,变量访问到window对象即被终止,作用域链向下访问变量是不被允许的。

10.var a= "1234",请变为倒序

解析:

var a ="2015".splice("");
a.sort(function(a,b){
return a>b?-1:1;
})

11.new操作符具体干了什么?

解析:1、创建一个空对象,并且this变量引用该对象,同时还
继承了该函数的原型。
2.属性和方法被加入到this引用的对象中。
3、新创建的对象由this所引用,并且最后隐式的返回this。

12.js对象的深度克隆

解析:

function clone(Obj) {
var buf;
if (Obj instanceof Array) {
buf= []; //创建一个空的数组
var i = Obj.length;
while (i--) {
buf[i] = clone(Obj[i]);
}
return buf;
}else if (Obj instanceof Object){
buf= {}; //创建一个空对象
for (var k in Obj) { //为这个对象添加新的属性
buf[k] = clone(Obj[k]);
return buf;
}else{
return Obj;

13.JavaScript原型,原型链,有什么特点?

解析:
★原型对象也是普通的对象,是对象-一个自带隐式的_ proto_
属性,原型也有可能有自己的原型,如果一个原型对象的原型不为nul的话,我们就称之为原型链。
★原型链是由- -些用来继承和共享属性的对象组成的(有限的)
对象链。

14.evel是什么?

解析:是把对应的字符串解析成JS代码并运行;
应该避免使用evel,不安全且非常消耗性能;

15.JavaScript对象的几种创建模式

解析:1,工厂模式
2,构造函数模式
3,原型模式
4,混合构造函数和原型模式
5,动态原型模式
6,寄生构造函数模式
7,稳妥构造函数模式

16.JavaScript继承的6种方法

解析:1,原型链继承
2,借用构造函数继承
3,组合继承(原型+借用构造)
4,原型式继承
5,寄生式继承
6,寄生组合式继承

17.从字符串var a = '2015是最重要的一年'截取出

解析:1. substring (str, end)
str是必须输入,必须是正值;
end是可选的必须是正值;
根据字面意思,str为截取的开始位置,字符串的
第一个字符位置为0; end为截取的结束位置.
substring() 方法返回的子串包括start处的字
符,但不包括end 处的字符。

  1. slice(str, end)
    slice()方法的用法基本跟substring-致,但sl
    ice 0的参数允许负值;
    ps:str必须比end小,否则返回空字符串;
  2. substr (str, length)
    str是必须输入,str允许为负值,用法跟slice()
    一样;length是截取字符串的长度;

18.用于判断输入的某个字符是否为空的方法

解析:

  • if(s==null||s.equals(''));
  • if(s==null||s.length()<=0);
  • if(s==null||s.isEmpty());

19.document.write和innerHTML的区别?

解析:document.write只能重绘整个页面,innerHTML可以重绘页面的一部分;

20.列举IE和其他浏览器不同的特性?

解析:
●IE支持currentstyle , FIrefox使用getcomputstyle
●IE使用innerText , Firefox使用textcontent
●滤镜方面: IE:filter:alpha(opacity= num) ; Firefox : -moz-opacity:num .
●事件方面:IE:attachEvent :火狐是addEventlistener
●鼠标位置: IE是event.clientx ;火狐是event. pagex
●IE使用event. srcElement ; Firefox使用event . target
●IE中消除list的原点仅需margin:0即可达到最终效果 ;FIrefox
需要设置margin:e;padding:以及1ist-style:none
●CSS圆角: ie7以下不支持圆角

21.Ajax是什么?

解析:是一种用于创建快速动态网页的技术。相当于异步JavaScript和XML;
传统的网页(不使用AJAX)如果需要更新内容,必须重新加载整个网页页面;

22.Ajax的优势?

解析:1.通过异步模式,提升了用户体验
2.优化了浏览器和服务器之间的传输,减少不必要的数据往
返,减少了带宽占用

  1. Ajax在客户端运行,承担了一部分本来由服务器承担的工
    作,减少了大用户量下的服务器负载。

23.Ajax最大的特点是什么?

解析:可以实现局部刷新;

24.Ajax的缺点是什么?

解析:1、ajax不支持浏览器back按钮。
2、安全问题AJAX暴露了与服务器交互的细节。
3.对搜索弓|擎的支持比较弱。
4、破坏了程序的异常机制。
5、不容易调试。

25.如何解决跨域问题?

解析:

  • 1.通过修改document.domain来跨子域:
    将子域和主域的document.domain设为同一个主域.前提条件 :这两个域名必须属于同-个基础域名!而且所用的协议,端口都要一致,否则无法利用document. domain进行跨域;
    主域相同的使用document.domain
  • 2.使用window.name来进行跨域:
    window对象有个name属性,该属性有个特征:即在一个窗口(window)的生命周期内,窗口载入的所有的页面都是共享一个windouw.name的。每个页面对window. name都有读写的权限,window.name是持久存在一个窗口载入过的所有页面中的;
  • 3.使用HTML5中新引进的window.postMessage方法跨域传送数据:
    还有flash.在服务器上设置代理页面等跨域方式。个人认为window.name的方法既不复杂,也能兼容到几乎所有浏览器这真是极好的一种跨域方法。

26.异步加载的方式有哪些?

  • defer,只支持IE
  • async
  • 创建script,插入到DOM中,加载完毕后callBack

27.XML和JSON的区别?

(1).数据体积方面。
JSON相对于XML来讲,数据的体积小,传递的速度更快些。
(2).数据交互方面。
JSON与JavaScript的交互更加方便,更容易解析处理,更好数据交互。
(3).数据描述方面。
JSON对数据的描述性比XML较差。
(4).传输速度方面。
JSON的速度要远远快于XML。

28.简述创建ajax的过程

(1)创建XMLHttpRequest对象,也就是创建一个异步调用对象.
(2)创建一个 新的HTTP请求并指定该HTTP请求的方法URL以及验证信息
(3)设查响应HTTP请求状态变化的函数.
(4)发送HTTP请求.
(5)获取异步调用返回的数据.
(6)使用JavaScript和DOM实现局部刷新.

29.哪些操作会造成内存泄露?

解析:内存泄漏指任何对象在您不再拥有或需要它之后 仍然存在。垃圾回收器定期扫描对象.并计算引用了每个对象的其他对象的数量。如果一个对象的引用数量为0 (没有其他对象引用过该对象), 或对该对象的惟一引用是循环的 ,那么该对象的内存即可回收。

30.模块化怎么做?

var module = (function(){
var count = 0;
var m1 = function(){xxxx};
var m2 = function(){xxxx};
return {
m1:m1,
m2:m2
};
})();

31.栈和堆的区别?

解析:栈的插入和删除操作都是在一端进行的,而队列的操作却是在两端进行的。
队列先进先出,栈先进后出。
栈只允许在表尾一端进行插入和删除,而队列只允许在表尾一端进行插入,在表头一端进行删除;

32.attribute和property的区别是什么?

解析:attribute是dom元素在文档中作为htm1标签拥有的属性;property就是dom元素在js中作为对象拥有的属性。
所以:
对于htm1的标准属性来说, attribute和property是同步的,是会自动更新的,
但是对于自定义的属性来说,他们是不同步的;

33.http状态码有哪些?

解析:

  • 100-199用于指定客户端应相应的某些动作。
  • 200-299用于表示请求成功。
  • 300-399用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。
  • 400-499用于指出客户端的错误。
  • 400语义有误,当前请求无法被服务器理解。
  • 401当前请求需要用户验证
  • 403服务器已经理解请求,但是拒绝执行它。
  • 500-599用于支持服务器错误。
  • 503 一服务不可用

34.WEB应用从服务器主动推送Data到客户端有那

些方式?
解析:
html5 websoket
WebSocket通过Flash
XHR长时间连接
XHR Multipart Streaming
不可见的Iframe

你可能感兴趣的:(JavaScript习题练习2)