程序员

javascript面试题

2017-02-18  本文已影响62人  风两般的男人

1、第一个为字母,后面是字母数字下划线总长度为5-20 正则:

 /^[a-zA-Z]\w{4-19}/

2、怎么规避javascript多人并发函数重命名问题:

根据不同的开发人员实现的功能,在函数名加前缀每个开发人员都把自己的函数封装到类中,然后调用的时候即使函数名相同,但是因为是要类.函数名来调用,所以也减少了重复的可能性

3、javascript如何实现面向对象中的继承

六中继承方式....更新中。。。

4、javascript如何检测一个变量是一个String类型的?请写出函数实现。

function a(obj){  return typeof(obj)=="string";}alert(a(123));alert(a("abc"));

5、javascript有几种数据类型基本数据类型:

Number(数字)String(字符串) null nudefined(未定义) boolean(布尔)引用数据类型:function(函数) object(对象)[Array]数组 Data(时间)RegExp正则 ...

6、AJAX是什么?同步和异步的区别?如何解决跨域问题?

AJAX的全称是Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。在不重新加载整个网页的情况下,对网页的某部分进行更新。

同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出现假死状态,当这个AJAX执行完毕后才会继续运行其他代码页面假死状态解除。而异步则这个AJAX代码运行中的时候其他代码一样可以运行。

[跨域引用文章]

JQuery的AJAX解决跨域问题:

$(document).ready(function() {

             var  url='http://localhost:8080/WorkGroupManagment/open/getGroupById"      +"?id=1&callback=?';

            $.ajax({

                    url:url,dataType:'jsonp',processData:false,type:'get',success:function(data) {

                                   alert(data.name);

                   }, error:function(XMLHttpRequest, textStatus, errorThrown) {

                                                 alert(XMLHttpRequest.status);

                                                 alert(XMLHttpRequest.readyState);

                                                  alert(textStatus);

                      }

});

});

JSONP也叫填充式JSON,是应用JSON的一种新方法,只不过是被包含在函数调用中的JSON(如:callback({"name", "chenjun"});)。JSONP由两部分组成:回调函数和数据。回调函数是当响应到来时应该在页面中调用的函数,而数据就是传入回调函数中的JSON数据跨域原理:利用标签没有跨域限制,实现跨域目的

JSONP优缺点

优点:它不像XMLHttpRequest对象实现的Ajax请求那样受到同源策略的限制;它的兼容性更好,在更加古老的浏览器中都可以运行;并且在请求完毕后可以通过调用callback的方式回传结果

缺点:它只支持GET请求而不支持POST等其它类型的HTTP请求;它只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间如何进行JS调用的问题

CORS

CORS(Cross-Origin Resource Sharing)跨域资源共享,定义了必须在访问跨域资源时,浏览器与服务器应该如何沟通。

跨域原理:CORS背后的基本思想就是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是应该成功还是失败

浏览器支持情况:

Chrome 3+      Firefox 3.5+     Opera 12+       Safari 4+         Internet Explorer 8+

Chrome,Firefox,Opera和Safari都使用XMLHttpRequest2对象。 Internet Explorer使用了类似的XDomainRequest对象,其工作原理和XMLHttpRequest大致相同,但增加了额外的安全预防措施。

CORS优缺点:

优点:支持所有类型的HTTP请求;使用普通的XMLHttpRequest发起请求和获得数据,拥有良好的出错处理

缺点:老式浏览器不支持

7、给出异步加载js方案,不少于两种

[js异步加载的三种解决方案]

8、document.write和 innerHTML的区别?

document.write是直接将内容写入页面的内容刘,会导致页面全部重绘,innerHTML将内容写入某个DOM节点,不会导致页面全部重绘

9、如何添加HTML元素的事件,有几种方法?

[添加html元素的事件]

1通过HTML元素属性2通过对象属性3.通过W3C监听方式(标准方式)或者IE专属的中间模型添加事件

10、多浏览器检测通过什么?

[常见浏览器User-Agent大全]

window.navigator.userAgent这个查询当前浏览器型号版本但是window.userAgent也可以查询到不知道有没有区别

11、如何控制网页在网络传输过程中的数据量?

我一般这样处理:

服务器发送数据块前发送数据块长度,然后发送数据

客户端先读取这个长度,然后按这个长度接收数据。

什么面向对象

mvc这种框架有什么好处?

会让项目可维护性高,所有涉及界面的代码都在视图(view)中,所有涉及核心逻辑的代码都在模型(Model)里面。URL路由之类的代码都在控制器(Controller)中

预解释:

1、在预解释的时候,不管条件是否成立,都要进行预解释

2、预解释的时候只对等号左边的进行预解释,右边的是值,是不进行预解释的

3、函数体中return下面的代码虽然不在执行了,但是需要进行预解释;return后面的返回的是值,是不进行预解释的;

4、自执行函数的function是不进行预解释的

5、在预解释阶段,如果当前的这个名字已经声明过了,那么下面在遇到就不会在从新的声明了,但是需要重新的赋值;

in:用来检测某一个属性名是否属于这个对象的

this:

->我们一般只研究函数执行的时候里面的this

->this是谁和当前的函数在哪执行和在哪定义没有半毛钱的关系

1)看函数执行的时候,函数名之前是否有".",有的话"."前面是谁this就是谁,没有的话this就是window

2)自执行函数中的this永远是window

3)给元素的某一个事件绑定方法,当事件触发的时候,方法中的this是当前元素本身

4)在构造函数模式中,我们的this.xxx=xxx中的this是当前的类的一个实例

5)call和apply强制改变this的指向->以上所有的this情况在遇到call/apply的时候都不好使,都已强制改变的为主

obj.fn.call(1);//this->1

一般情况下,我们执行call方法第一个传递的参数值是谁,那么fn中的this就是谁

[在非严格模式下]

第一个参数没有传递值、传递的是null、传递的是undefined fn中的this都是window

[严格模式下]

第一个参数传递的是谁this就是谁,传递null/undefined,fn中的this都是对应的null/undefined,不传递值默认也是undefined

6)定时器的this永远是window

浏览器的内存分为两类:

堆内存:引用数据类型开辟的那个存储空间(用来存储对象的键值对和函数的代码字符串的) ->存储仓库

栈内存:就是我们的作用域(全局作用域/私有的作用域)->执行环境

[栈内存的释放]

全局作用域,在浏览器加载页面的时候形成,只有在浏览器关闭页面的时候才能释放->"全局作用域属于不销毁的作用域"

立即销毁的私有作用域:一般情况下,函数执行完成后,当前形成的这个私有的作用域,就没有用了,为了提高性能,浏览器会自动的把它释放掉

不销毁的私有作用域:函数执行形成一个私有的作用域A,但是A中的某一部分内容被A以外的东西(变量)给占用了,那么A这个作用域就不能销毁了

一个函数执行,形成一个私有的作用域A,A中返回一个引用的数据类型值(函数、对象、数组...),并且被外面的一个变量接收了,此时A这个作用域就不能释放了

闭包:

闭包是一种"机制":函数执行形成私有的作用域(不管销毁还是不销毁),保护了里面的私有变量不受外界的干扰

单例模式:

起到了一个分组的作用->把描述同一件事物的属性和方法放在同一个"命名空间"下,避免了全局变量过多使用造成的冲突

每一个对象都是一个单独的实例,里面的属性都是自己私有的属性,不同实例之间互不影响

JS中的异步编程:定时器、所有的事件绑定都是异步编程、回调函数也可以理解为异步编程、AJAX中也可以设置异步编程


上一篇下一篇

猜你喜欢

热点阅读