此文较长,文末大惊喜等着你!

$HTML, HTTP,web综合问题

1、前端需要注意哪些SEO

titledescriptionkeywordstitledescriptiondescriptionkeywordsHTMLHTMLHTMLjsiframeiframealt

2、img的title和alt有什么区别

alt

3、HTTP的几种请求方法用途

GETPOSTURLPUTPOSTPOSTHEADDELETEOPTIONSURLAllow“GET,POST”TRACETRACECONNECTTCP/IP

4、从浏览器地址栏输入url到显示页面的步骤

URLDNSIPHTML、JS、CSSHTML、JS、CSSHTMLDOM

5、如何进行网站性能优化

contentHTTPCSSinline ImageDNSDNSDOMServerCDNETagGzipCookiecookiecssCSS@importJavascriptjavascriptcssjavascriptcssDOMcssHTML

6、HTTP状态码及其含义

1XX100 Continueposthttp header2XX200 OK201 Created202 Accepted3XX301 Moved Permanently302 Found303 See OtherGETURI304 Not Modified4XX400 Bad Request401 Unauthorized403 Forbidden404 Not FoundURI5XX:500 Internal Server Error503 Service Unavailable

7、语义化的理解

htmlCSSSEO

8、介绍一下你对浏览器内核的理解?

layout engineerRendering EngineJSHTMLXMLCSSJSjavascriptJS

9、html5有哪些新特性、移除了那些元素?

HTML5SGMLcanvasvideoaudiolocalStoragesessionStoragearticlefooterheadernavsectioncalendardatetimeemailurlsearchwebworkerwebsocketGeolocationbasefontbigcenterfontsstrike,frameframesetnoframesHTML5IE8/IE7/IE6document.createElement持HTML5html5shim

10、HTML5的离线储存怎么使用,工作原理能不能解释一下?

HTML5.appcachecookiemanifestcache.manifestwindow.applicationCache
CACHE MANIFEST
#v0.11
CACHE:
js/app.js
css/style.css
NETWORK:
resourse/logo.png
FALLBACK:
/ /offline.html

11、浏览器是怎么对HTML5的离线储存资源进行管理和加载的呢

htmlmanifestmanifestappappmanifestmanifes

12、请描述一下 cookies,sessionStorage 和 localStorage 的区别?

cookiesessionStoragelocalStoragecookiesessionStoragelocalStoragecookielocalStoragesessionStoragecookiecookie

13、iframe有那些缺点?

iframeOnloadSEOiframeiframeiframejavascriptiframesrc

14、WEB标准以及W3C标准是什么?

cssjs

15、xhtml和html有什么区别?

XHTMLPDAXHTML

16、Doctype作用? 严格模式与混杂模式如何区分?它们有何意义?

link@imortlink@importCSSimportIE5linkXHTMLlink@importJSDOCTYPE

17、行内元素有哪些?块级元素有哪些? 空(void)元素有那些?行内元素和块级元素有什么区别?

a b span img input select strongdiv ul ol li dl dt dd h1 h2 h3 h4…p

18、HTML全局属性(global attribute)有哪些

classdata-*draggableididlangstylecsstitle

19、Canvas和SVG有什么区别?

svgDOMcanvassvgcanvas

20、HTML5 为什么只需要写 ?

HTML5SGMLDTDdoctypeHTML4.01SGMLDTD

21、如何在页面上实现一个圆形的可点击区域?

svgborder-radiusjs

22、网页验证码是干嘛的,是为了解决什么安全问题

  • 区分用户是计算机还是人的公共全自动程序。可以防止恶意破解密码、刷票、论坛灌水
  • 有效防止黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试

$CSS部分

1、css sprite是什么,有什么优缺点

background-positionHTTP

2、display: none;与visibility: hidden;的区别

display:nonevisibility: hiddendisplay: none;visibility: hidden;hiddenvisibility: visible;displayvisibilitydisplay: nonevisibility: hidden;

3、link与@import的区别

linkHTML@importlink@importFOUClinkrel="alternate stylesheet"link@import@import@importlink@import

4、什么是FOUC?如何避免

Flash Of Unstyled Contenthead

5、如何创建块级格式化上下文(block formatting context),BFC有什么用

floatnonepositionabsolutefixeddisplayinline-blocktable-celltable-captionflexinline-flexoverflowvisiblemargin

6、display,float,position的关系

displaynonepositionfloatpositionabsolutefixedfloatnonedisplayfloatnonedisplaydisplaydisplaydisplay

7、清除浮动的几种方式,各自的优缺点

divheightdivclear:bothdiv:afterzoomdivoverflow:hiddendivbrclear:both

8、为什么要初始化CSS样式?

CSSSEO

9、css3有哪些新特性

cssborder-radiustext-shadowtransform

CSS3新增伪类有那些?

p:first-of-type

p:last-of-type

p:only-of-type

p:only-child

p:nth-child(2)

:after:before:enabled:disabled:checked

10、display有哪些值?说明他们的作用

blocknoneinline-blocklist-itemtableinheritdisplay

11、介绍一下标准的CSS的盒子模型?低版本IE的盒子模型有什么不同的?

IEW3CpaddingmarginborderIEontentborderpadding

12、CSS优先级算法如何计算?

!important > id > class > tagimportant

13、对BFC规范的理解?

  • 它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用

14、谈谈浮动和清除浮动

  • 浮动的框可以向左或向右移动,直到他的外边缘碰到包含框或另一个浮动框的边框为止。由于浮动框不在文档的普通流中,所以文档的普通流的块框表现得就像浮动框不存在一样。浮动的块框会漂浮在文档普通流的块框上

15、position的值, relative和absolute定位原点是

absolutestaticfixedrelativestaticinheritposition

16、display:inline-block 什么时候不会显示间隙?(携程)

marginfont-size:0letter-spacingword-spacing

17、PNG,GIF,JPG的区别及如何选

GIF8256booleanJPEG256PNGPNG8truecolor PNGPNG8GIF256alpha

18、行内元素float:left后是否变为块级元素?

display:blockdisplay:block

19、在网页中的应该使用奇数还是偶数的字体?为什么呢?

  • 偶数字号相对更容易和 web 设计的其他部分构成比例关系

20、::before 和 :after中双冒号和单冒号 有什么区别?解释一下这2个伪元素的作用

:::CSS3

21、如果需要手动写动画,你认为最小时间间隔是多久,为什么?(阿里)

60Hz1601/60*1000ms = 16.7ms

22、CSS合并方法

@importcssCSSCSSCSSSass\Compass

23、CSS不同选择器的权重(CSS层叠的规则)

!important1000ID10010

24、列出你所知道可以改变页面布局的属性

positiondisplayfloatwidthheighmarginpaddingtopleftright

25、CSS在性能优化方面的实践

cssGzipcsshead@import

26、CSS3动画(简单动画的实现,如旋转等)

CSS3transitiontransformanimationtransitiontransition-propertytransition-durationtransition-timing-functiontransition-delaytransformrotatescaleskewtranslateanimation@keyframesanimation-nameanimation-durationanimation-timing-functionanimation-delayanimation-iteration-countanimation-direction

27、base64的原理及优缺点

httpCPU

28、几种常见的CSS布局

流体布局
.left {
        float: left;
        width: 100px;
        height: 200px;
        background: red;
    }
    .right {
        float: right;
        width: 200px;
        height: 200px;
        background: blue;
    }
    .main {
        margin-left: 120px;
        margin-right: 220px;
        height: 200px;
        background: green;
    }
<div class="container">
    <div class="left"></div>
    <div class="right"></div>
    <div class="main"></div>
</div>
圣杯布局
.container {
            margin-left: 120px;
            margin-right: 220px;
        }
        .main {
            float: left;
            width: 100%;
            height:300px;
            background: green;
        }
        .left {
            position: relative;
            left: -120px;
            float: left;
            height: 300px;
            width: 100px;
            margin-left: -100%;
            background: red;
        }
        .right {
            position: relative;
            right: -220px;
            float: right;
            height: 300px;
            width: 200px;
            margin-left: -200px;
            background: blue;
        }
<div class="container">
    <div class="main"></div>
    <div class="left"></div>
    <div class="right"></div>
</div>
双飞翼布局
 .content {
            float: left;
            width: 100%;
        }
        .main {
            height: 200px;
            margin-left: 110px;
            margin-right: 220px;
            background: green;
        }
        .main::after {
            content: '';
            display: block;
            font-size:0;
            height: 0;
            zoom: 1;
            clear: both;
        }
        .left {
            float:left;
            height: 200px;
            width: 100px;
            margin-left: -100%;
            background: red;
        }
        .right {
            float: right;
            height: 200px;
            width: 200px;
            margin-left: -200px;
            background: blue;
        }
<div class="content">
    <div class="main"></div>
</div>
<div class="left"></div>
<div class="right"></div>

29、stylus/sass/less区别

ScssLESSLESSScssStylusScssLESSStylusSassRubyLESSStylusNodeJSNPM

30、postcss的作用

PostCSSCSSPostCSSCSSautoprefixerpostcsscssautoprefixer

$JavaScript

1、闭包

  • 闭包就是能够读取其他函数内部变量的函数

  • 闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用链域

  • 闭包的特性:

    • 函数内再嵌套函数
    • 内部函数可以引用外层的参数和变量
    • 参数和变量不会被垃圾回收机制回收

说说你对闭包的理解

  • 使用闭包主要是为了设计私有的方法和变量。闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。在js中,函数即闭包,只有函数才会产生作用域的概念

  • 闭包 的最大用处有两个,一个是可以读取函数内部的变量,另一个就是让这些变量始终保持在内存中

  • 闭包的另一个用处,是封装对象的私有属性和私有方法

  • 好处:能够实现封装和缓存等;

  • 坏处:就是消耗内存、不正当使用会造成内存溢出的问题

使用闭包的注意点

  • 由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露
  • 解决方法是,在退出函数之前,将不使用的局部变量全部删除

2、说说你对作用域链的理解

window

3、JavaScript原型,原型链 ? 有什么特点?

prototypeprototype个prototypeprototypeinstance.constructor.prototype = instance.__proto__JavaScriptJavascriptPrototypeObject

4、请解释什么是事件代理

Event DelegationJavaScripttabletdclick

5、Javascript如何实现继承?

prototypeapplycall
 function Parent(){
        this.name = 'wang';
    }

    function Child(){
        this.age = 28;
    }
    Child.prototype = new Parent();//继承了Parent,通过原型

    var demo = new Child();
    alert(demo.age);
    alert(demo.name);//得到被继承的属性
  }

6、谈谈This对象的理解

你不知道的这里都有:前端常见问题整理
thisnewthisnewthisIEattachEventthisWindow

7、事件模型

W3Ccapturingtargetinbubbling
DOMW3cstopPropagation()cancelBubble = trueclick - W3cpreventDefault()IEwindow.event.returnValue = false

8、new操作符具体干了什么呢?

thisthisthisthis

9、Ajax原理

AjaxAJAXXmlHttpRequestjavascripDOMAjaxJavaScriptXMLHttpRequestDOMXMLHttpRequestaja
 // 1. 创建连接
    var xhr = null;
    xhr = new XMLHttpRequest()
    // 2. 连接服务器
    xhr.open('get', url, true)
    // 3. 发送请求
    xhr.send(null);
    // 4. 接受请求
    xhr.onreadystatechange = function(){
        if(xhr.readyState == 4){
            if(xhr.status == 200){
                success(xhr.responseText);
            } else { // fail
                fail && fail(xhr.status);
            }
        }
    }

ajax 有那些优缺点?

AjaxAjaxAJAX

10、如何解决跨域问题?

jsonpiframewindow.namewindow.postMessage

11、模块化开发怎么做?

  • 立即执行函数,不暴露私有成员
var module1 = (function(){
    var _count = 0;
    var m1 = function(){
      //...
    };
    var m2 = function(){
      //...
    };
    return {
      m1 : m1,
      m2 : m2
    };
  })();

12、异步加载JS的方式有哪些?

IEasyncscriptDOMcallBack

13、那些操作会造成内存泄漏?

setTimeout

14、XML和JSON的区别?

JSON于XMLJSONJavaScriptJSONXMLJSONXML

15、谈谈你对webpack的看法

WebPackWebPackWebHTMLJavascriptCSSwebpackwebpack

16、说说你对AMD和Commonjs的理解

CommonJSNode.jsCommonJSAMDAMDCommonJSmodule.exportsexports

17、常见web安全及防护原理

sqlSQLWeb"-"SQLhash

XSS原理及防范

Xss(cross-site scripting)Webhtmljavascriptcookie

XSS防范方法

”<”,”>”,”;”,”’”html tag

XSS与CSRF有什么区别吗?

XSSCSRFCSRFACookieAB

CSRF的防御

CSRF

18、用过哪些设计模式?

newthis

19、为什么要有同源限制?

IframeJavascriptinput

20、offsetWidth/offsetHeight,clientWidth/clientHeight与scrollWidth/scrollHeight的区别

offsetWidth/offsetHeightclientWidth/clientHeightscrollWidth/scrollHeight

21、javascript有哪些方法定义对象

var obj = {};var obj = new Object();var obj = Object.create(Object.prototype);

22、常见兼容性问题?

png24PNG8marginpadding*{margin:0;padding:0;}
body,ul,li,ol,dl,dt,dd,form,input,h1,h2,h3,h4,h5,h6,p{
margin:0;
padding:0;
}
IEeventxypageXpageYFirefoxeventpageXpageYx,y

22、说说你对promise的了解

Promise/A+Promisepending:fulfilledrejected.fulfilled:rejected:settled: PromisefulfilledrejectedpendingfulfilledrejectedsettledPromisedeferredasynchronous

Promise 的构造函数

Promise
var promise = new Promise(function(resolve, reject) {

        if (...) {  // succeed

            resolve(result);

        } else {   // fails

            reject(Error(errMessage));

        }
    });
Promisethenthenthenable
promise.then(onFulfilled, onRejected)
fulfilledrejectedfutureonFulfilledresolveonRejectedreject

23、你觉得jQuery源码有哪些写的好的地方

jquerywindowwindowjquerywindowundefinedundefinedjqueryjquery.prototypejquery.fnjQueryjquery

24、vue、react、angular

Vue.jswebMVVMViewModelDOMDirectivesFiltersAngularJSMVVMAngularreactReactVIEWfacebookUIvirtual dom

25、Node的应用场景

JavascriptChrome V8I/O核CPUCPU

26、谈谈你对AMD、CMD的理解

CommonJSNode.jsCommonJSAMDAMDCommonJSmodule.exportsexports

27、那些操作会造成内存泄漏?

setTimeout

28、web开发中会话跟踪的方法有哪些

cookiesessionurlinputip

29、介绍js的基本数据类型

UndefinedNullBooleanNumberString

30、介绍js有哪些内置对象?

ObjectJavaScriptObjectArrayBooleanNumberStringFunctionArgumentsMathDateRegExpError

31、说几条写JavaScript的基本规范?

===/!==true/falsenew ArraySwitchdefaultIffor-invar

32、JavaScript有几种类型的值?,你能画一下他们的内存图吗?

UndefinedNullBooleanNumbeStringstackheap

33、javascript创建对象的几种方式?

javascriptJSON
  • 对象字面量的方式
person={firstname:"Mark",lastname:"Yun",age:25,eyecolor:"black"};
function
 function Person(){}
    var person=new Person();//定义一个function,如果使用new"实例化",该function可以看作是一个Class
        person.name="Mark";
        person.age="25";
        person.work=function(){
        alert(person.name+" hello...");
    }
person.work();
functionthis
function Pet(name,age,hobby){
       this.name=name;//this作用域:当前对象
       this.age=age;
       this.hobby=hobby;
       this.eat=function(){
          alert("我叫"+this.name+",我喜欢"+this.hobby+",是个程序员");
       }
    }
    var maidou =new Pet("麦兜",25,"coding");//实例化、创建对象
    maidou.eat();//调用eat方法
  • 用工厂方式来创建(内置对象)
var wcDog =new Object();
     wcDog.name="旺财";
     wcDog.age=3;
     wcDog.work=function(){
       alert("我是"+wcDog.name+",汪汪汪......");
     }
     wcDog.work();
  • 用原型方式来创建
function Dog(){

     }
     Dog.prototype.name="旺财";
     Dog.prototype.eat=function(){
     alert(this.name+"是个吃货");
     }
     var wangcai =new Dog();
     wangcai.eat();

  • 用混合方式来创建
 function Car(name,price){
      this.name=name;
      this.price=price; 
    }
     Car.prototype.sell=function(){
       alert("我是"+this.name+",我现在卖"+this.price+"万元");
      }
    var camry =new Car("凯美瑞",27);
    camry.sell(); 

34、eval是做什么的?

JSeval2jsJSONeval,var obj =eval('('+ str +')')

35、null,undefined 的区别?

undefinedundefinedundefinedundefinednullnullnull=====nullundefined

36、["1", "2", "3"].map(parseInt) 答案是多少?

[1, NaN, NaN]parseInt(val, radix)radixmap3(element, index, array)radix

37、javascript 代码中的"use strict";是什么意思 ? 使用它区别是什么?

use strictECMAscript 5JSJavascript

38、JSON 的了解?

JSON(JavaScript Object Notation)JavaScriptJSON
var obj =eval('('+ str +')');
var obj = str.parseJSON();
var obj = JSON.parse(str);
JSON
var last=obj.toJSONString();
var last=JSON.stringify(obj);

39、js延迟加载的方式有哪些?

deferasyncDOMjs

40、同步和异步的区别?

  • 同步:浏览器访问服务器请求,用户看得到页面刷新,重新发请求,等请求完,页面刷新,新内容出现,用户看到新内容,进行下一步操作
  • 异步:浏览器访问服务器请求,用户正常操作,浏览器后端进行请求。等请求完,页面不刷新,新内容也会出现,用户看到新内容

41、渐进增强和优雅降级

  • 渐进增强 :针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。

  • 优雅降级 :一开始就构建完整的功能,然后再针对低版本浏览器进行兼容

42、defer和async

deferjsscriptasyncjsscript

43、说说严格模式的限制

withthis

44、attribute和property的区别是什么?

attributedomhtmlpropertydomjshtmlattributeproperty

45、谈谈你对ES6的理解

JavaScriptfor-ofargumentsES6romisePromiseletconstletmodule

46、ECMAScript6 怎么写class么,为什么会出现class这种东西?

OOPjsjsObject.creat()class

47、什么是面向对象编程及面向过程编程,它们的异同和优缺点

  • 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了
  • 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为
  • 面向对象是以功能来划分问题,而不是步骤

48、面向对象编程思想

  • 基本思想是使用对象,类,继承,封装等基本概念来进行程序设计
  • 优点
    • 易维护
      • 采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的
    • 易扩展
    • 开发工作的重用性、继承性高,降低重复工作量。
    • 缩短了开发周期

49、对web标准、可用性、可访问性的理解

  • 可用性(Usability):产品是否容易上手,用户能否完成任务,效率如何,以及这过程中用户的主观感受可好,是从用户的角度来看产品的质量。可用性好意味着产品质量高,是企业的核心竞争力
  • 可访问性(Accessibility):Web内容对于残障用户的可阅读和可理解性
  • 可维护性(Maintainability):一般包含两个层次,一是当系统出现问题时,快速定位并解决问题的成本,成本低则可维护性好。二是代码是否容易被人理解,是否容易修改和增强功能。

50、如何通过JS判断一个数组?

instanceofinstanceof
var arr = []; 
arr instanceof Array; // true
constructorconstructor
var arr = []; 
arr.constructor == Array; //true
jQuery
Object.prototype.toString.call(value) == '[object Array]'
// 利用这个方法,可以写一个返回数据类型的方法
var isType = function (obj) {
     return Object.prototype.toString.call(obj).slice(8,-1); 
}
ES5isArray()
var a = new Array(123);
var b = new Date();
console.log(Array.isArray(a)); //true
console.log(Array.isArray(b)); //false

51、谈一谈let与var的区别?

letletletconst

52、map与forEach的区别?

  • forEach方法,是最基本的方法,就是遍历与循环,默认有3个传参:分别是遍历的数组内容item、数组索引index、和当前遍历数组Array
  • map方法,基本用法与forEach一致,但是不同的,它会返回一个新的数组,所以在callback需要有return值,如果没有,会返回undefined

53、谈一谈你理解的函数式编程?

  • 简单说,"函数式编程"是一种"编程范式"(programming paradigm),也就是如何编写程序的方法论
  • 它具有以下特性:闭包和高阶函数、惰性计算、递归、函数是"第一等公民"、只用"表达式"

54、谈一谈箭头函数与普通函数的区别?

  • 函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象
  • 不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误
  • 不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用Rest参数代替
  • 不可以使用yield命令,因此箭头函数不能用作Generator函数

55、谈一谈函数中this的指向吧?

  • this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象

  • 《javascript语言精髓》中大概概括了4种调用方式:

  • 方法调用模式

  • 函数调用模式

  • 构造器调用模式

graph LR
A-->B
  • apply/call调用模式

56、异步编程的实现方式?

  • 回调函数

    • 优点:简单、容易理解
    • 缺点:不利于维护,代码耦合高
  • 事件监听(采用时间驱动模式,取决于某个事件是否发生):

    • 优点:容易理解,可以绑定多个事件,每个事件可以指定多个回调函数
    • 缺点:事件驱动型,流程不够清晰
  • 发布/订阅(观察者模式)

    • 类似于事件监听,但是可以通过‘消息中心’,了解现在有多少发布者,多少订阅者
  • Promise对象

    • 优点:可以利用then方法,进行链式写法;可以书写错误时的回调函数;
    • 缺点:编写和理解,相对比较难
  • Generator函数

    • 优点:函数体内外的数据交换、错误处理机制
    • 缺点:流程管理不方便
  • async函数

    • 优点:内置执行器、更好的语义、更广的适用性、返回的是Promise、结构清晰。
    • 缺点:错误处理机制

57、对原生Javascript了解程度

RegExpJSONAjaxDOMBOMMVCCanvasECMAScript

58、Js动画与CSS动画区别及相应实现

CSS3CSS3JavaScriptIE6javascriptCSS

59、JS 数组和对象的遍历方式,以及几种方式的比较

通常我们会用循环的方式来遍历数组。但是循环是 导致js 性能问题的原因之一。一般我们会采用下几种方式来进行数组的遍历

for inforforEachforEachvalueindexforEachFirefoxchromeforEachbreakcontinuereturnfor-inarraykeyfor-inJSONarrayDOM

60、gulp是什么?

gulpNode.jsIOAPIgulp

61、说一下Vue的双向绑定数据的原理

vue.jsObject.defineProperty()settergetter

$jQuery

1、你觉得jQuery或zepto源码有哪些写的好的地方

  • jquery源码封装在一个匿名函数的自执行环境中,有助于防止变量的全局污染,然后通过传入window对象参数,可以使window对象作为局部变量使用,好处是当jquery中访问window对象的时候,就不用将作用域链退回到顶层作用域了,从而可以更快的访问window对象。同样,传入undefined参数,可以缩短查找undefined时的作用域链
 (function( window, undefined ) {

         //用一个函数域包起来,就是所谓的沙箱

         //在这里边var定义的变量,属于这个函数域内的局部变量,避免污染全局

         //把当前沙箱需要的外部变量通过函数参数引入进来

         //只要保证参数对内提供的接口的一致性,你还可以随意替换传进来的这个参数

        window.jQuery = window.$ = jQuery;

    })( window );
  • jquery将一些原型属性和方法封装在了jquery.prototype中,为了缩短名称,又赋值给了jquery.fn,这是很形象的写法
  • 有一些数组或对象的方法经常能使用到,jQuery将其保存为局部变量以提高访问速度
  • jquery实现的链式调用可以节约代码,所返回的都是同一个对象,可以提高代码效率

2、jQuery 的实现原理?

(function(window, undefined) {})(window);jQueryJSwindow.jQuery = window.$ = jQuery;

3、jQuery.fn 的 init 方法返回的 this 指的是什么对象? 为什么要返回 this?

  • jQuery.fn 的 init 方法 返回的 this 就是 jQuery 对象
  • 用户使用 jQuery() 或 $() 即可初始化 jQuery 对象,不需要动态的去调用 init 方法

4、jQuery.extend 与 jQuery.fn.extend 的区别?

$.fn.extend()$.extend()jQuery$.extend(object)
$.extend({
  min: function(a, b) { return a < b ? a : b; },
  max: function(a, b) { return a > b ? a : b; }
});
$.min(2,3); //  2
$.max(4,5); //  5
  • $.extend([true,] targetObject, object1[, object2]); // 对targt对象进行扩展
var settings = {validate:false, limit:5};
var options = {validate:true, name:"bar"};
$.extend(settings, options);  // 注意:不支持第一个参数传 false
// settings == {validate:true, limit:5, name:"bar"}
$.fn.extend(json)
$.fn.extend({
   alertValue: function() {
      $(this).click(function(){
        alert($(this).val());
      });
   }
});

$("#email").alertValue();

5、jQuery 的属性拷贝(extend)的实现原理是什么,如何实现深拷贝?

var newObject = $.extend({}, oldObject);var newObject = $.extend(true, {}, oldObject);

6、jQuery 的队列是如何实现的?队列可以用在哪些地方?

queue()/dequeue()/clearQueue()animate()ajax
var func1 = function(){alert('事件1');}
var func2 = function(){alert('事件2');}
var func3 = function(){alert('事件3');}
var func4 = function(){alert('事件4');}

// 入栈队列事件
$('#box').queue("queue1", func1);  // push func1 to queue1
$('#box').queue("queue1", func2);  // push func2 to queue1

// 替换队列事件
$('#box').queue("queue1", []);  // delete queue1 with empty array
$('#box').queue("queue1", [func3, func4]);  // replace queue1

// 获取队列事件(返回一个函数数组)
$('#box').queue("queue1");  // [func3(), func4()]

// 出栈队列事件并执行
$('#box').dequeue("queue1"); // return func3 and do func3
$('#box').dequeue("queue1"); // return func4 and do func4

// 清空整个队列
$('#box').clearQueue("queue1"); // delete queue1 with clearQueue

7、jQuery 中的 bind(), live(), delegate(), on()的区别?

bindlivedocumentdelegateon1.9

8、是否知道自定义事件? jQuery 里的 fire 函数是什么意思,什么时候用?

  • 事件即“发布/订阅”模式,自定义事件即“消息发布”,事件的监听即“订阅订阅”
  • JS 原生支持自定义事件,示例:
  document.createEvent(type); // 创建事件
  event.initEvent(eventType, canBubble, prevent); // 初始化事件
  target.addEventListener('dataavailable', handler, false); // 监听事件
  target.dispatchEvent(e);  // 触发事件
  • jQuery 里的 fire 函数用于调用 jQuery 自定义事件列表中的事件

9、jQuery 通过哪个方法和 Sizzle 选择器结合的?

SizzleRight To LeftjQuery$(selecter).find(selecter);Sizzle

10、jQuery 中如何将数组转化为 JSON 字符串,然后再转化回来?

// 通过原生 JSON.stringify/JSON.parse 扩展 jQuery 实现
 $.array2json = function(array) {
    return JSON.stringify(array);
 }

 $.json2array = function(array) {
    // $.parseJSON(array); // 3.0 开始,已过时
    return JSON.parse(array);
 }

 // 调用
 var json = $.array2json(['a', 'b', 'c']);
 var array = $.json2array(json);

11、jQuery 一个对象可以同时绑定多个事件,这是如何实现的?

  $("#btn").on("mouseover mouseout", func);

  $("#btn").on({
      mouseover: func1,
      mouseout: func2,
      click: func3
  });

12、针对 jQuery 的优化方法?

DOMidclass#idonjQuerydata()jQuery

13、jQuery 的 slideUp 动画,当鼠标快速连续触发, 动画会滞后反复执行,该如何处理呢?

JSsetTimeout$('.tab').stop().slideUp();

14、jQuery UI 如何自定义组件?

$.widget()$.widget("ns.widgetName", [baseWidget], widgetPrototype);

15、jQuery 与 jQuery UI、jQuery Mobile 区别?

jQueryJSDOMAJAXjQuery UIjQueryjQuery MobilejQuery

16、jQuery 和 Zepto 的区别? 各自的使用场景?

jQueryPCZepto位移动设备,相对更轻量级。它的基本兼容

17、jQuery对象的特点

JQueryJQueryJQuery

$编程题

1、写一个通用的事件侦听器函数

2、如何判断一个对象是否为数组

function isArray(arg) {
    if (typeof arg === 'object') {
        return Object.prototype.toString.call(arg) === '[object Array]';
    }
    return false;
}

3、冒泡排序

  • 每次比较相邻的两个数,如果后一个比前一个小,换位置
var arr = [3, 1, 4, 6, 5, 7, 2];

function bubbleSort(arr) {
    for (var i = 0; i < arr.length - 1; i++) {
        for(var j = 0; j < arr.length - i - 1; j++) {
            if(arr[j + 1] < arr[j]) {
                var temp;
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
    return arr;
}

console.log(bubbleSort(arr));

4、快速排序

  • 采用二分法,取出中间数,数组每次和中间数比较,小的放到左边,大的放到右边
var arr = [3, 1, 4, 6, 5, 7, 2];

function quickSort(arr) {
    if(arr.length == 0) {
        return [];    // 返回空数组
    }

    var cIndex = Math.floor(arr.length / 2);
    var c = arr.splice(cIndex, 1);
    var l = [];
    var r = [];

    for (var i = 0; i < arr.length; i++) {
        if(arr[i] < c) {
            l.push(arr[i]);
        } else {
            r.push(arr[i]);
        }
    }

    return quickSort(l).concat(c, quickSort(r));
}

console.log(quickSort(arr));

5、编写一个方法 求一个字符串的字节长度

  • 假设:一个英文字符占用一个字节,一个中文字符占用两个字节
function GetBytes(str){

        var len = str.length;

        var bytes = len;

        for(var i=0; i<len; i++){

            if (str.charCodeAt(i) > 255) bytes++;

        }

        return bytes;

    }

alert(GetBytes("你好,as"));

6、bind的用法,以及如何实现bind的函数和需要注意的点

bindcallapplycallapplybindbind
Function.prototype.bind = function(ctx) {
    var fn = this;
    return function() {
        fn.apply(ctx, arguments);
    };
};

$其他

1、谈谈你对重构的理解

tableDIV+CSSCSSSEO

2、什么样的前端代码是好的

  • 高复用低耦合,这样文件小,好维护,而且好扩展。

3、对前端工程师这个职位是怎么样理解的?它的前景会怎么样?

  • 前端是最贴近用户的程序员,比后端、数据库、产品经理、运营、安全都近

    • 实现界面交互
    • 提升用户体验
    • 有了Node.js,前端可以实现服务端的一些事情
  • 前端是最贴近用户的程序员,前端的能力就是能让产品从 90分进化到 100 分,甚至更好,

UI

4、你觉得前端工程的价值体现在哪

  • 为简化用户使用提供技术支持(交互部分)

  • 为多个浏览器兼容性提供支持

  • 为提高用户浏览速度(浏览器性能)提供支持

  • 为跨平台或者其他基于webkit或其他渲染引擎的应用提供支持

  • 为展示数据提供支持(数据接口)

5、平时如何管理你的项目?

globe.cssutf-8CSSHTMLstyle.cssJSJSimages.png png8
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。