美文网首页程序员
javascript面试题

javascript面试题

作者: 风两般的男人 | 来源:发表于2017-02-18 10:19 被阅读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中也可以设置异步编程


    相关文章

      网友评论

        本文标题:javascript面试题

        本文链接:https://www.haomeiwen.com/subject/ikjlwttx.html