Day17

1-jquery 中的$.each 和$(选择器).each()有什么区别?

我们都用过Jqurey中的each函数,都知道each()有两种方式去调用,一种是通过$.each()调用,另一种是$(selector).each()去调用,那么它们之间有什么区别?

  翻看一下Jquery源码就会知道,$.each()是核心的实现,$(selector).each()是调用的$.each(),先来分析一下$.each()的源码(在底部):

    each(obj,callback,args)函数接收3个参数:obj--要遍历的对象或数组、callback--要遍历执行的回调函数、args--自己指定的数组(先无视)。

当调用each()有第三个参数的时候,便会进入下面的代码块,来分析下:

    if(isArray) {
            for(; i < length; i++) {
                value = callback.apply(obj[i], args);
                if(value === false) { break; }
            }
        } else {
            for(i in obj) {
                value = callback.apply(obj[i], args);
                if(value === false) { break; }
            }
        }
    同样道理,会先判断你要遍历的对象是否是数组,如果是数组,则遍历数组的元素obj[i],并执行obj[i].callback(args)
    注意!这个地方传的参数是你自己传进来的args数组,这是和没有args参数不一样的地方,也就是说如果你调用each函数是传入了自己的数组参数,回调函数的参数列表就是你所传的args数组。
    其他的同上。
$(selector).each(callback,args)函数接收2个参数:callback--要遍历执行的回调函数、args--自己指定的数组。

2-query 中的$.each 和 js 中的 foeEach()有什么区别?

 $(function(){     // 3.1遍历数组     var arr = [1, 3, 5, 7, 9];     // 3.1.1通过原生方法遍历数组     // 第一个回调函数参数是遍历到的元素     // 第二个回调函数参数是当前遍历的索引     // 返回值:没有返回值     var res = arr.forEach(function(ele, idx){       console.log(idx, ele);     });     console.log(res);     // 3.1.2通过jQuery静态方法遍历数组     // 第一个回调函数参数是当前遍历的索引     // 第二个回调函数参数是遍历到的元素     // 返回值:被遍历的数组     var $res2 = $.each(arr, function(idx, ele){       console.log(idx, ele);     });     console.log($res2);     // 3.2遍历对象     var obj = {name:"lnj",age:"33",gender:"male"};     // 3.2.1 js对象没有forEach方法,所以通过for in方法遍历对象     for(var key in obj){       console.log(key, obj[key]);     }     // 3.2.2 通过jQuery静态方法遍历对象     $.each(obj,function(key, value){       console.log(key, value);     });   }); </script>  

1.在遍历数组时:

回调函数中参数的位置不一样,forEach中为第一个参数为ele,第二个为index。each中第一个为index,第二个为ele;

回调函数中是否有返回值,forEach中没有返回值,each有返回值,返回被遍历的数组

2.遍历对象

forEach不能遍历对象,可以使用for in;

而each可以通过jq的讲台方法来遍历,即$.each(obj,function(key,value){})

3-window.onload 和$(docuMent).ready() 有什么区别?

window.onload是Javascript中得函数,意思是:等待网页中所有内容加载完毕之后(包括图片);
而$(documetn).ready()是在网页中的所有DOM结构绘制完毕之后就可以执行了,可能有与DOM关联的元素还没有加载完,所以相比之下更快一些;

window.onload=function(){

  alert('I am No.1'); }; window.onload=function(){  alert('I am No.2'); } 结果只能输出“I am No.2” 而换成: $(document).ready(function(){ alert('I am No.1'); }); $(document).ready(function(){ alert('I am No.2'); }); 结果输出 I am  No.1  ,I am No.2

4-jquery 实现链式编程的原理是什么?

节约JS代码;

所返回的都是同一个对象,可以提高代码的效率。

通过简单扩展原型方法并通过return this的形式来实现跨浏览器的链式调用。利用JS下的简单工厂方法模式,来将所有对于同一个DOM对象的操作指定同一个实例。
上一篇:Day17


下一篇:2021-02-06 大数据课程笔记 day17