• js文件以scirpt标签元素呈现在html里面的。浏览器根据html文件以此解析标签,当解析到scirpt标签时,会停止html解析,阻塞住,开始下载js文件并且执行它,在执行的过程中,如果是第一个js文件此时浏览器会触发首次渲染。 所以出现一个问题---js文件大大阻碍了html页面解析及渲染。

      因此引入async和defer两个属性(对于首屏优化有很大的提升,也要谨慎使用)

      async:开启另外一个线程下载js文件,下载完成,立马执行。(此时才发生阻塞)
      defer:开启另一个线程下载js文件,直到页面加载完成时才执行。(根本不阻塞)

  • 作用域:变量和函数能被有效访问的区域或者集合。作用域决定了代码块之间的资源可访问性。

    作用域也就是一个独立的空间,用于保护变量防止泄露,也起到隔离作用。每个作用域里的变量可以相同命名,互不干涉。
    作用域又分为全局作用域和函数作用域,块级作用域。 全局作用域任何地方都可以访问到,如window,Math等全局对象。 函数作用域就是函数内部的变量和方法,函数外部是无法访问到的。 块级作用域指变量声明的代码段外是不可访问的,如let,const。

     

    javascript采用的静态作用域,也可以称为词法作用域,意思是说作用域是在定义的时候就创建了, 而不是运行的时候。下面这个例子:

    let a=1;
    function aa(){
         console.log(a); //输出1 
    } 
    function bb(){ 
        let a=2;
         aa();
    }