zoukankan      html  css  js  c++  java
  • 面试 | 蚂蚁金服面试经历

    晚上面试蚂蚁金服,前端,觉得大厂问的问题就是不一样,有纵向有横向,针对下列几个问题,我面试时候答的不好,现在重新学习,沉思一会...

    第一个问题:

    1、先问熟悉jq吗?解释一下jq的架构,

      jq源码的 new jQuery 中return jQuery.fn.init

      jQuery.extend 与jq.fn.exend的区别:jQuery.extend只给jQuery构造函数的扩展,而jQuery.fn.exend,是给jQuery构造函数的原型扩展方法

    2、说一下jq的事件绑定

      on bind delegate

    3、完了吗?

      就这些。

    4、先说下事件绑定,监听,委托的区别
            window.onload =function(){
                var btn4 = document.getElementById("btn4");
                btn4.onclick  = function(){
                    console.log(1); // 不执行
                }
                btn4.onclick = function(){
                    console.log(2); //执行
                }
            }

      事件绑定:只执行第二个事件 

            window.onload =function(){
                var btn4 = document.getElementById("btn4");
                btn4.addEventListener("click",hello1)
                btn4.addEventListener("click",hello2)
            }
                function hello1(){
                 alert("hello 1");
                }
                function hello2(){
                 alert("hello 2");
                }

      监听事件:两次事件都执行

            window.onload = function(){
                var li = document.getElementsByTagName("li");
                var body = document.getElementById("body");
                for(var i = 0;i<li.length;i++){
                    (function(i){
                        li[i].onclick=function(){
                            console.log(this.innerHTML);
                        }
                    })(i)
                }
                var newLi = document.createElement("li");
                newLi.innerHTML = "4";
                body.appendChild(newLi);
            }

      事件绑定:传统事件无法就添加的元素加事件

            window.onload=function(){
                var body = document.getElementById("body");
                var li = document.getElementsByTagName("li");
                document.addEventListener("click",function(event){
                    event = event || window.event;
                    var target = event.target || event.srcElement;
                    // console.log(target);
                    for(var i=0;i<li.length;i++){
                        (function(i){
                        if(target == li[i]){
                        console.log(target.innerHTML);
                        }
                        })(i)
                    }
                })
                var newLi = document.createElement("li");
                newLi.innerHTML = "4";
                body.appendChild(newLi);
            } 

        事件委托:事件委托可以给新添加的元素加事件

        事件委托的含原理:事件执行,事件冒泡,把事件加到父元素或根元素上面去,谁触发执行谁的效果,document触发执行ducument触发的结果,li触发执行li触发的结果

    5、说下jquery on和bind的区别

      bind 和on都支持绑定多个事件,但是bind不支持事件委托,也就是无发在新增加的元素中绑定同一事件,而on可以事件委托,

        $(document).ready(function(){
                $("li").bind( "click",function(){
                    console.log(this.innerHTML);
                })
                var li = document.createElement("li");
                li.innerHTML = "4";
                $("body").append(li);
    })

        用bind绑定事件,无法事件委托,新产生的标签无法绑定click事件

        $(document).ready(function(){
                $("body").on("click","li",function(){
                    console.log(this.innerHTML);
                })
                var li = document.createElement("li");
                li.innerHTML = "4";
                $("body").append(li);
    })

       用on绑定事件,可以事件委托,新产生的标签可以绑定click事件

            $(document).ready(function(){
                $("body").delegate("li","click",function(){
                    console.log(this.innerHTML);
                })
                var li = document.createElement("li");
                li.innerHTML = "4";
                $("body").append(li);
            })

      用delegate绑定事件,则也可以事件委托,但与on传入的第一、二个参数相反

            $(document).ready(function(){
                $(".clickme").bind("click1", function (event, message1, message2) {
                  alert(message1 + ' ' + message2);
                }).trigger("click1", ["Hello","World!"]);
            })
    trigger,可指定绑定参数的形参的值,前提是绑定事件名与trigger的事件名一致

    第二个问题:

    1、js异步操作有哪些

      回调函数

      监听事件

      定时器

      ajax

      Promise 

      generator (下来查资料才知道的)

      async/await(下来查资料才知道的)

    2、分别解释一下

      回调函数:执行一个函数时,在函数内部处理操作,把操作结果以参数形式传入回调函数中。

      监听事件:js操作dom就是事件机制,可以异步操作,addEventListener("click",function(){},false)

      定时器:这个问题我给我自己挖了一个坑

      ajax:典型的异步操作

      Promise:ES6出的异步操作

      generator:调用generator就是调用generator内部的指针,调用generator的next就是让指针移动,可暂停恢复执行,函数体内部数据交换,错误处理,但generaor执行必须要执行器

      

  • 相关阅读:
    项目上线之期初数据调整
    系统升级时,数据库脚本执行注意事项,血的教训
    数据精度问题的处理
    系统发布说明文档
    SQLServer中数据库文件的存放方式,文件和文件组
    数据库的持续集成和版本控制
    SQL Server 远程链接服务器详细配置【转载】
    批处理中的IF ERRORLEVEL
    asp.net用url重写URLReWriter实现任意二级域名
    关于excel导入access问题(已解决)
  • 原文地址:https://www.cnblogs.com/dirkhe/p/7352153.html
Copyright © 2011-2022 走看看