zoukankan      html  css  js  c++  java
  • web前端面试01

    1--什么是DOM事件处理程序?
         首先要理解什么是DOM?Dom是针对HTML文档的一个API。什么是事件流?事件流分为:事件冒泡(IE的事件流)和事件捕获。事件冒泡就是由最详细的元素開始接收,然后逐级向上。事件捕获就是由不太详细的元素開始接收,逐级向下,最详细的元素最后才接收到事件。


    DOM事件处理程序分为DOM0级、DOM2级。

    DOM0级具有简单,跨浏览器的优势,它是把函数赋值给一个事件的处理程序属性。

    比如:btn.onlick=function(){。。。};DOM2级事件定义了两个方法。用于处理指定和删除事件处理程序的操作。

    addEventListener()和removeEventListener()。

    它们都接收三个參数,要处理的事件名、作为事件处理程序的函数和布尔值。

    布尔值为true表示在捕获阶段调用事件处理程序,布尔值为false是在冒泡处调用。注意:事件名要去掉“on”。

    通过addEventListener()加入的事件,仅仅能由removeEventListener()删除。IE存在兼容问题。能够用attachEvent()加入事件和detachEvent()删除事件。

    接收两个參数,事件处理程序的名称和函数。注意:事件名此时要加”on”。
    2--假设给一个元素同一时候绑定两个事件,会怎么样?
        Dom 0级和Dom 2级都能够给一个元素加入多个事件,Dom 0级的每一个事件仅仅支持一个事件处理程序,假设绑定同一个事件,那么后边的那个事件。函数会覆盖掉前边的那个事件函数。Dom2级能够加入多个事件处理程序。他们会依照加入的顺序触发。
    3--call、apply的差别?
    首先。要明确什么call和apply存在的作用。call 和 apply 都是为了改变某个函数执行时的 上下文而存在的。换句话说,就是为了改变函数体内部 this 的指向。由于 JavaScript 的函数存在「定义时上下文」和「执行时上下文」以及「上下文是能够改变的」这种概念。

    call和apply动态改变this,当一个object没有某个方法,可是其他的有。我们能够借助call或apply用其他对象的方法来操作。他们的差别仅在于,call 须要把參数按顺序传递进去。而 apply 则是把參数放在数组里。


    4--什么是闭包?(这玩意真的非常重要!)
    闭包拥有三个特性:1.函数嵌套函数;2.函数内部能够引用外部的參数和变量;3.參数和变量不会被垃圾回收机制回收。闭包是指有权訪问还有一个函数作用域中的变量的函数,创建闭包的最常见的方式就是在一个函数内创建还有一个函数,通过还有一个函数訪问这个函数的局部变量。使用闭包有一个长处。也是它的缺点。就是能够把局部变量驻留在内存中。能够避免使用全局变量。全局变量在每一个模块都可调用,这势必将是灾难性的。

    (所以推荐使用私有的,封装的局部变量。)一般函数运行完成后。局部活动对象就被销毁。内存中只保存全局作用域。

    但闭包的情况不同。
    更透彻的说法:所谓“闭包”,就是在构造函数体内定义另外的函数作为目标对象的方法函数。而这个对象的方法函数反过来引用外层函数体中的暂时变量。这使得仅仅要目标对象在生存期内始终能保持其方法,就能间接保持原构造函数体当时用到的暂时变量值。

    虽然最開始的构造函数调用已经结束,暂时变量的名称也都消失了,但在目标对象的方法内却始终能引用到该变量的值,并且该值仅仅能通这样的方法来訪问。即使再次调用同样的构造函数,但仅仅会生成新对象和方法,新的暂时变量仅仅是相应新的值。和上次那次调用的是各自独立的。
    顺便在扯点马上运行函数和闭包的关系:马上运行函数能配合闭包保存状态。

    像普通的函数传參一样,马上运行函数也能传參数。

    假设在函数内部再定义一个函数。而里面的那个函数能引用外部的变量和參数(闭包),利用这一点,我们能使用马上运行函数锁住变量保存状态。


    一轮面试基本上就是这些重点题,跟网上常见的面试题几乎相同。

    当时我在逛街。周围非常嘈杂,勉强听清楚面试官的问题之后,磕磕绊绊的回答了,并且声音特别大,不知道那个面试官的耳朵有没有被吵聋。剩下的就是聊了下做过的项目。一些自己写的js特效,还有对HTML5 ,CSS3的掌握程度。大概一面持续了20分钟左右。感觉整个过程聊得非常high。
    没想到隔了一天,就接到了二轮面试的电话。由于这次我所处的环境非常安静,所以整个面试过程”沉闷”。还是相同的时间,我接到了电话。这次面试题问的非常基础。首先是问了我对哪方面感兴趣。我跟他说是软件开发,对硬件不了解。他又问一般用什么语言,我说基本上都是JavaScript。大一的时候学过c。于是他问我,c语言中,打开文件的函数。我说open(),正确的应该是fopen()。接着他问我说,怎么实现高速排序。我回答完了,接着又问操作系统的文件管理机制,我当时就傻了。我说我不是非常清楚,于是他就说。那网络呢,我说这学校学了计算机网络的课,于是他说简单说一下http协议。我说是tcp/tp么?他说不是。好吧··我傻了,仅仅是依稀记得三次握手。


    1-http协议:
    是一种通信协议,同意将HTML文档从webserver传送到client的浏览器,它是一个应用层的协议,承载与TCP上,由请求和响应构成,是一个标准的clientserver模型。


    2-get、post的差别
    Get用于取数据。post用于传数据。差别:get在URL中传数据。容量小,安全性差。有缓存。post是在http content 容器里传数据。容量大,安全性好一点。无缓存。
    3-什么是cookie?
    Cookie就是页面用来保存信息的,它的特点有:同一个域名下共享同一套cookie;数量有限,一般50条左右,大小也有限(4-10k);并且有过期的时间,再生成的时候会被指定一个expires值。这就是他的生存周期。

  • 相关阅读:
    如何卸载VS 2017之前版本比如VS 2013、VS2015、 VS vNext?
    在SQL Server中如何进行UPDATE TOP .....ORDER BY?
    EntityFramework 6.x和EntityFramework Core插入数据探讨
    2017-2018:时间戳
    http协议进阶(六)代理
    认清性能问题
    <转>安全测试思维导图
    RESTful API浅谈
    http协议进阶(五)连接管理
    聊聊软件测试的职业规划
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7039397.html
Copyright © 2011-2022 走看看