前端面试题(JS篇)

时间:2014-06-15 07:15:06   收藏:0   阅读:521

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

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

1、JS相关问题:

               function Person(){

                       some cod

              }var person = Person();

              var person = new Person();

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

           render: function () {

                 this.getAsyncData(function () {

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

         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;

        }

          Array.prototype.duplicator = function(){

                    return this.concat(this);

         }

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

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

jQuery 相关问题:

      <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  

 

      <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()

 

  $(‘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()一文。

 

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

前端面试题(JS篇),布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!