前端面试题(JS篇)

原题地址:http://handyxuefeng.blog.163.com/blog/static/454521722013111714040259/

好吧,最近打算换工作,所以关注比较多的是面试题,这套还不错,留下~~

1、JS相关问题:

  • 解释下事件代理(基础题)
  • 解释下 JavaScript 中 this 是如何工作的(始终指向调用当前函数的对象)
  • 解释下原型继承的原理。
  • AMD vs. CommonJS?
  • 什么是哈希表?
  • 解释下为什么接下来这段代码不是 IIFE(立即调用的函数表达式):function foo(){ }();.((function(){ })())
  • 描述以下变量的区别:nullundefined 或 undeclared?(undefined是变量声明了但没有定义,没有声明会直接报错,undeclared是一种错误)
  • 什么是闭包,如何使用它,为什么要使用它?
  • 请举出一个匿名函数的典型用例?
  • 解释 “JavaScript 模块模式” 以及你在何时使用它。
  • 你是如何组织自己的代码?是使用模块模式,还是使用经典继承的方法?
  • 请指出 JavaScript 宿主对象和原生对象的区别?(http://blog.csdn.net/foamflower/article/details/9165691)
  • 指出下列代码的区别:

function Person(){

some cod

}var person = Person();

var person = new Person();

第一个是函数调用,对象是全局变量;第二个是新创建了个person对象

  • .call 和 .apply 的区别是什么?(参数不同)
  • 请解释 Function.prototype.bind 的作用?(保持this一致性)

render: function () {

this.getAsyncData(function () {

this.specialFunction();
                     this.anotherSpecialFunction();
              }.bind(this));}

  • 你何时优化自己的代码?
  • 在什么时候你会使用 document.write()
  • 请指出浏览器特性检测,特性推断和浏览器 UA 字符串嗅探的区别?
  • 请尽可能详尽的解释 AJAX 的工作原理。
  • 请解释 JSONP 的工作原理,以及它为什么不是真正的 AJAX。(Ajax不能跨域)
  • 你使用过 JavaScript 模板系统吗?
  • 请解释变量声明提升。
  • 请描述下事件冒泡机制。
  • "attribute" 和 "property" 的区别是什么?(http://www.liyao.name/2013/09/differences-between-property-and-attribute-in-javascript.html)
  • 为什么扩展 JavaScript 内置对象不是好的做法?(容易影响到他人使用,枚举对象属性时会出现扩展项)
  • 为什么扩展 JavaScript 内置对象是好的做法?
  • 请指出 document load 和 document ready 两个事件的区别。(load是全部加载完,ready只是dom加载完了)
  • == 和 === 有什么不同?
  • 你如何从浏览器的 URL 中获取查询字符串参数。

function getQueryStringArgs(){

var qs = (location.search.length>0 ? location.search.substring(1) : ""),

args = {},

items = qs.length ? qs.split("&") : [],

item = null,

name = null,

value = null,

i = 0,

len = items.length;

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

item = items[i].split("=");

name = decodeURIComponent(item[0]);

value = decodeURIComponent(item[1]);

if(name.length){

args[name] = value;

}

}

return args;

}

  • 请解释一下 JavaScript 的同源策略。
  • 请描述一下 JavaScript 的继承模式。(原型、构造函数、组合继承、寄生)
  • 如何实现下列代码: [1,2,3,4,5].duplicator(); // [1,2,3,4,5,1,2,3,4,5]`

Array.prototype.duplicator = function(){

return this.concat(this);

}

  • 描述一种 JavaScript 中实现 memoization(避免重复运算)的策略。

换个问法就是,如何优化递归

http://demon.tw/programming/javascript-memoization.html

  • 什么是三元表达式?“三元” 表示什么意思?
  • 函数的参数元是什么?
  • 什么是 "use strict"; ? 使用它的好处和坏处分别是什么?

jQuery 相关问题:

  • 解释"chaining"。 函数中的链式结构,如$().().()
  • 解释"deferreds"。 延迟执行,减少回调函数的嵌套 http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html
  • 你知道哪些针对 jQuery 的优化方法。(1) 用ID选择器 (2) 缓存jquery对象,方便后面使用。(3)使用data缓存数据.
  • 请解释 .end() 的用途。.
    $(‘ul.first‘).find(‘.foo‘).css(‘background-color‘, ‘red‘)
      .end().find(‘.bar‘).css(‘background-color‘, ‘green‘);
      <div id="test">   

<h1>jQuery end()方法</h1>   
     <p>讲解jQuery中end()方法。</p>   
            </div>  
      JS代码:

$(document).ready(function() {    
              $("#test").click(function() {    
                  $(this).find("p").hide().end().hide();    
              });    
         });   
       点击id为test的div时,首先找到div里边的p标签,将其隐藏。接下来使用end()方法结束了对p标签的引用,此时返回的是#test(jQuery对象),从而后边的hide()方法隐藏了div。这样相信大家已经理解了jQuery中end()方法。

  • 你如何给一个事件处理函数命名空间,为什么要这样做?

$("#test").bind(‘click.a‘,function(){

alert(1);

});

$("#test").bind(‘click.b‘,function(){

alert(2);

});

$("#test").bind(‘click.c‘,function(){

alert(3);

});

$("#test").unbind(‘click.a‘);   //解绑a

$("#test").trigger(‘click.c‘);  //弹出3

$("#test").click(); //弹出2、弹出3

  • 请说出你可以传递给 jQuery 方法的四种不同值。选择器(字符串),HTML(字符串),回调函数,HTML元素,对象,数组,元素数组,jQuery对象等
  • 什么是效果队列?http://www.w3school.com.cn/jquery/data_queue.asp
  • 请指出 .get()[]eq() 的区别。

      <p style="color:yellow">绯雨</p>

使用eq来获得第一个p标签的color值:

     $("p").eq(0).css("color")  //因为eq(num)返回的是个jq对象,所以可以用jq的方法css

使用get来获得第一个p标签的color值:

     $("p").get(0).style.color  //因为get(num)返回的是个html对象,所以要使用传统的HTML对象方法,jq对象此时就没用了。

当然,你也可以get(num)后把对象转为jq的对象再进行操作:

    $($("p").get(0)).css("color")
  • 请指出 .bind().live() 和 .delegate() 的区别。

.bind()

  $(‘a‘).bind(‘click‘, function() { alert("That tickles!") });

  这是最简单的绑定方法了。JQuery扫描文档找出所有的$(‘a’)元素,并把alert函数绑定到每个元素的click事件上。

   .live()

  $(‘a‘).live(‘click‘, function() { alert("That tickles!") });

  JQuery把alert函数绑定到$(document)元素上,并使用’click’和’a’作为参数。任何时候只要有事件冒泡到document节点上,它就查看该事件是否是一个click事件,以及该事件的目标元素与’a’这一CSS选择器是否匹配,如果都是的话,则执行函数。

  live方法还可以被绑定到具体的元素(或context)而不是document上,像这样:

  $(‘a‘, $(‘#container‘)[0]).live(...);

  .delegate()

  $(‘#container‘).delegate(‘a‘, ‘click‘, function() { alert("That tickles!") });

  JQuery扫描文档查找$(‘#container’),并使用click事件和’a’这一CSS选择器作为参数把alert函数绑定到$(‘#container’)上。任何时候只要有事件冒泡到$(‘#container’)上,它就查看该事件是否是click事件,以及该事件的目标元素是否与CCS选择器相匹配。如果两种检查的结果都为真的话,它就执行函数。

 为什么.delegate()要比.live()好用

  基于几个原因,人们通常更愿意选用jQuery的delegate方法而不是live方法。考虑下面的例子:

  $(‘a‘).live(‘click‘, function() { blah() }); 
  // 或者 
  $(document).delegate(‘a‘, ‘click‘, function() { blah() });

  速度

  后者实际上要快过前者,因为前者首先要扫描整个的文档查找所有的$(‘a’)元素,把它们存成jQuery对象。尽管live函数仅需要把’a’作为串参数传递以用做之后的判断,但是$()函数并未知道被链接的方法将会是.live()。

  而另一方面,delegate方法仅需要查找并存储$(document)元素。

  一种寻求避开这一问题的方法是调用在$(document).ready()之外绑定的live,这样它就会立即执行。在这种方式下,其会在DOM获得填充之前运行,因此就不会查找元素或是创建jQuery对象了。

  灵活性和链能力

  live函数也挺令人费解的。想想看,它被链到$(‘a’)对象集上,但其实际上是在$(document)对象上发生作用。由于这个原因,它能够试图以一种吓死人的方式来把方法链到自身上。实际上,我想说的是,以$.live(‘a’,…)这一形式作为一种全局性的jQuery方法,live方法会更具意义一些。

  仅支持CSS选择器

  最后一点,live方法有一个非常大的缺点,那就是它仅能针对直接的CSS选择器做操作,这使得它变得非常的不灵活。

  欲了解更多关于CSS选择器的缺点,请参阅Exploring jQuery .live() and .die()一文。

  • 请指出 $ 和 $.fn 的区别,或者说出 $.fn 的用途。($指jq对象,$.fn指jquery的原型,可以用来定义jQuery的新属性)
  • 请优化下列选择器:http://down.chinaz.com/try/201203/1695_1.htm

$(".foo div#bar:eq(0)")`

前端面试题(JS篇)

时间: 2024-10-25 05:44:14

前端面试题(JS篇)的相关文章

前端面试题 -- JS篇

前端面试题 -- JS篇 类型 1.js中有哪些数据类型,并解释清楚原始数据类型和引用数据类型 js中共有null,undefined, string,number,boolean,object六种数据类型. 原始数据类型: null,undefined, string,number,boolean 引用数据类型:object 两者的区别:1)值存储方式不同: 原始数据类型:将变量名和值都存储在栈内存中 引用数据类型:将变量名存储在栈内存中,将值存储在堆内存中,并在栈内存中存储值的地址,该地址指

前端面试题 ---- html篇

一.html 1.html和xhtml区别 1. html:超文本标记语言,hyper text markup language      xhtml: 可拓展的超文本标记语言 extensible hyper text markup language 它是一种置标语言,表现方式和超文本标记语言html类似不过语法更加严格 2.  xhtml 所有标签必须小写 在XHTML中,所有的标签都必须小写,不能大小写穿插其中,也不能全部都是大写. 3.  xhtml 标签必须成对出现 像是<p>...

前端面试题 | JS部分(附带答案)

目前在找工作,所以各方收集了一堆面试题.其实刷面试题的过程也能更新自己对知识的认识,所以也提醒自己多看多理解.如果对下面题目有更深理解,会实时更新.遇到新题目,也会不定时更新.希望能帮助到部分朋友- 一.各种函数方法定义及区别 1. typeof运算符和instanceof运算符以及isPrototypeOf()方法的区别 typeof是一个运算符,用于检测数据的类型,比如基本数据类型null.undefined.string.number.boolean,以及引用数据类型object.func

高级前端面试题 js 2

第 1 题:(滴滴.饿了么)写 React / Vue 项目时为什么要在列表组件中写 key,其作用是什么? 1. 更准确因为带key就不是就地复用了,在sameNode函数 a.key === b.key对比中可以避免就地复用的情况.所以会更加准确. 2. 更快利用key的唯一性生成map对象来获取对应节点,比遍历方式更快.主要是为了提升diff[同级比较]的效率.自己想一下自己要实现前后列表的diff,如果对列表的每一项增加一个key,即唯一索引,那就可以很清楚的知道两个列表谁少了谁没变.而

前端面试题js和jQuery

真正面试中,面试官往往采用的是由难到易的套路,那javascript和jQuery就是重中之重了,以及针对项目和所用技术方面的一些问题也就是你的必备储粮啦! JavaScript 什么是闭包(closure),为什么要用它? 闭包简单的说就是一个函数能访问外部函数的变量,这就是闭包,不理解就看代码,例如: function aa(x){ var num=1; function bb(y){ console.log(x+y+(++num)); } } aa函数中的bb函数就是闭包了,bb函数可以使

web前端面试题整理(HTML篇)

web前端面试题整理(HTML篇)需要web前端课程工具和电子书,可以加: 33群105601600;  22群1203428331. h5的改进:新元素画布canvas: HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成音频audio视频video语义性: article,  nav ,  footer, section, aside, hgroup等.时间time 新属性拖放: draggable   <img draggable=&q

各大互联网公司前端面试题(js)

对于巩固复习js更是大有裨益.    初级Javascript: 1.JavaScript是一门什么样的语言,它有哪些特点? 没有标准答案. 2.JavaScript的数据类型都有什么? 基本数据类型:String,Boolean,Number,Undefined, Null 引用数据类型:Object(Array,Date,RegExp,Function) 那么问题来了,如何判断某变量是否为数组数据类型? 方法一.判断其是否具有“数组性质”,如slice()方法.可自己给该变量定义slice方

常见前端面试题之HTML/CSS部分

转自http://www.cnblogs.com/jscode/archive/2012/07/10/2583856.html Doctype是什么?如何触发严格模式与混杂模式模式?区分它们有何意义? Doctype是document type(文档类型)的简写,是用来说明所用的XHTML或HTML是什么版本的.XHTML1.0 提供了三种DTD声明可供选择,分别是: 1.过渡的(Transitional,也叫混杂模式):要求比较宽松,允许继续使用HTML4.01的标识,完整声明为 <!DOCT

金三银四,磨砺锋芒;剑指大厂,扬帆起航(2020年最全大厂WEB前端面试题精选)下

金三银四,磨砺锋芒:剑指大厂,扬帆起航(2020年最全大厂WEB前端面试题精选)下 引言 元旦匆匆而过,2020年的春节又接踵而来,大家除了忙的提着裤子加班.年底冲冲冲外,还有着对于明年的迷茫和期待!2019年有多少苦涩心酸,2020年就有更多幸福美好,加油,奥利给!怀着一颗积极向上的心,来面对未来每一天的挑战! 所谓"兵马未动,粮草先行",我们打响明天的战役也需要精神食粮来做后勤保障才是.在此我整理了多位从业者和我在2019年底至2020年初的一厂面试精选题,希望对磨砺锋芒.奋发向上