async:异步,立即开始下载,但不能阻止其他页面的操作,比如其他脚本加载。
defer:延迟加载。
如上只对外部
页面加载出现空白?
把js放在元素中的最后面,即的前面。
异步脚本保证在load事件前执行,但可能在DOMContentLoaded之前或者之后执行。
load事件:DOM加载完毕 + 样式表 + 图片都完成加载时,将触发load。
DOMContentLoaded:只加载DOM完成后。
DOMContentLoaded…----load.
var:声明提升,值不会提升。
let: 范围是块作用域,块作用域是函数作用域的子集。
与var不同的是1.不会提升。2.不会成为window对象的属性。
for循环中的let声明:
1.在let出现之前,for循环定义的迭代变量会渗透到循环外部中,因为在退出循环时,迭代变量保存的是导致循环退出的值。
for(var i=0;i<5;i++){
}
console.log(i)//5
2.在let声明迭代变量时,JS引擎在后台会每个迭代声明一个新的迭代变量,每个setTimeout引用的都是不同的变量实例。
for(let i=0;i<5;i+=){
setTimeout(()=>console.log(i),0) // 0,1,2,3,4;
}
每次迭代声明一个 独立变量实例的行为适用于所有风格的for循环,包括for – in和for --of循环。
const: 与let不同的地方。
1.赋值为对象的const变量是不能再被重新赋值为其他引用,但对象的键值不受影响,但let可以。
2.定位的变量必须初始化。
3.定义常量后就不能再赋值。