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