javascript读书随笔2

2.1 require.js与AMD规范

    require.js是一种支持AMD规范,是一种能将web前端变成模块化编程的框架,其中最重要的两个函数为require和define。define是开发者开发的方法,require是模块试用者关心的方法。

    AMD规范即异步模块定义。

2.2加载器所在路径探知

      补充知识点1:window.error简单解析

      在javascript中也存在try-catch语句,在window.error中会传给error三个参数,第一个为message,是我们在throw  new error中可以自行添加,也可以是系统自动给出。第二个参数为scriptURI,第三个参数为lineNumber,即你发生错误的代码的文件路径和代码行数。

       如果在window.onerror绑定一个函数,然后改函数返回一个true浏览器将不会在状态栏中提示错误;默认返回false;

       补充知识点2:js文件的加载解析

       以我们已知的知识我们知道,所有浏览器在下载JS的时候,会阻止一切其他活动,比如其他资源的下载,内容的呈现等等。至到JS下载、解析、执行完毕后才开始继续并行下载其他资源并呈现内容。然而更加深入的理解js解析时,我们可以将js分为嵌入式和外部调用式的

       嵌入式js:在js程序执行完之前,js会阻塞所有内容的呈现。

       引入式js:js只会阻塞在其后的内容呈现。

       番外篇:css文件,图片文件等都是可以并行下载的,但是如果其后有段js代码,它将会以js代码为分割线完成js代码前的下载,再进行后面的文件下载。

       根本原因:因为浏览器会维持html中css和js的顺序,样式表必须在嵌入的JS执行前先加载、解析完。而嵌入的JS会阻塞后面的资源加载,所以就会出现上面CSS阻塞下载的情况。

推荐的一些方法:

       1、放在底部,虽然放在底部照样会阻塞所有呈现,但不会阻塞资源下载。
       2、如果嵌入JS放在head中,请把嵌入JS放在CSS头部。
       3、使用defer
       4、不要在嵌入的JS中调用运行时间较长的函数,如果一定要用,可以用setTimeout来调用   //其实是将它放入事件队列

       补充知识点3:在ie下node.getAttribute的第二个参数含义

       在ie下node,getAttribute具有第二个参数

       0     ---------  默认为0,执行一个大小写不明感的属性查找,当属性存在返回一个修改的属性

       1     ---------  执行一个大小写敏感的属性查找。大写字母和小写字母必须完全比配节点属性名

       2     ---------  返回一个string类型的属性值,第二个参数为2对事件属性不起效果

       4     ---------  返回一个完整的URL属性,这支队URL属性有效

function getBasePath(){
    //请看补充知识点1
    try{
        a.b.c();
    }catch(e){
        if(e.fileName){         //firefox
            return e.fileName
        }else if(e.sourceURL){       //safari
            return e.sourceURL;
        }
    }
    /*
    理解下一段,请先看补充知识点2
    */
    var nodes=document.getElementsByTagName("script")
    if(window.VBArray){   //ie678识别方法 例如!-[1,]  
        for(var i=nodes.length,node;node=nodes[--i]){
            if(node.readyState==="interactive"){  //
                break;
            }
        }
    }else {
        node=nodes[nodes.length-1];
    }
    var src = document.querySelector ? node.src:node.getAttribute("src",4);  //请看补充知识点3
    return src;
}

 

 

 

 

 

 

 

 

 

 

 

 

    

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。