js面试题-----事件及ajax

题目1:编写一个通用的事件监听函数

答案:

function bindEvent(elem,type,selector,fn){
    if(fn==null){
        fn = selector;
        selector = null
    }
    elem.addEventListener(type,function(e){
        var target;
        if(selector){
            target = e.target;
            if(target.matches(selector)){
                fn.call(target,e)
            }
        }else{
            fn(e)
        }
    })
}

题目2:描述事件冒泡流程

答案:当给某元素绑定一个事件的时候,首先会触发自己 绑定的,然后会逐层向上级查找事件,这就是事件冒泡

题目3:对于一个无限下拉加载图片的页面,如何给每个图片绑定事件

答案:可以使用代理,通过对父级元素绑定一个事件,通过判断事件的target属性来进行判断,添加行为

题目4:手动编写一个ajax,不依赖第三方库

答案:

var xhr = new XMLHttpRequest();
xhr.open('GET','/api',false);
xhr.onreadystatechange = function(){
    if(xhr.readystate==4){
        if(xhr.status==200){
            alert(xhr.responseText);
        }
    }
}
xhr.send(null);

题目5:跨域的几种实现方式(端口、域名、协议只要一个不同就是跨域)

答案:JSONP   服务器端设置http  header

题目6:描述一下cookie,sessionStorage,localStorage的区别

答案:cookie用户客户端和服务器端通信,但是它有本地存储的功能

      cookie的缺点:存储量太小,只有4kb。所有http请求都带着,会影响获取资源的效率。

   localStorage和sessionStorage

   最大存储量5M  API简单易用

题目7:DOM事件类

  DOM事件级别

    DOM0    ele.onclick = function(){}

    DOM2    ele.addEventListener('click',function(){},false)

    DOM3    ele.addEventListener('keyup',function(){},false)

  事件模型

    捕获(从上到下)   冒泡(从下到上)

  事件流

    捕获阶段 -->目标阶段-->冒泡阶段

  描述DOM事件捕获的具体流程

    window->document->html->body->...

  Event对象的常见应用

    event.preventDefault() //阻止默认行为

    event.stopPropagation() //阻止冒泡

    event.stopImmediatePropagation() //事件响应优先级(例如绑定两个点击事件,当执行一个的时候另一个不让执行,可以在执行的里面加上这个)

    event.currentTarget // 当前绑定点击的事件

    event.target // 点击的目标对象 (这个在事件代理里面经常用到)

  自定义事件   

var eve = new Event('custome');
      ev.addEventListener('custome',function(){
        console.log('custome')
      })
      ev.dispatchEvent(eve);
原文地址:https://www.cnblogs.com/diasa-fly/p/7495803.html