MutationObserver
变量提升
在ES6之前,JS只有全局作用域和函数作用域,没有块级作用域(catch和with除外)。
在js引擎遇到变量的时候,如 :
var a = 2;
事实上引擎进行了两步操作:1,编译阶段在当前作用域的顶部声明变量:var a(变量提升);而 a = 2则会被留到原地等待执行阶段。
结论:
无论作用域中的声明出现在什么地方,都将在代码本身被执行前首先进行处理。可以将这个过程形象地想象成所有的声明(变量和函数)都会被“移动”到各自作用域的最前端,这个过程被称为 变量(函数)提升。
当有多个同名变量声明的时候,函数声明会覆盖其他的声明。如果有多个函数声明,则是由最后的一个函数声明覆盖之前所有的声明;
let/const 与var
都存在变量提升,而前者存在块级作用域,而后者不存在;后者可重复多次声明,前者不行。