函数作用域和块级作用域

IIFE

IIFE代表立即执行函数表达式,他可以导致代码的运行顺序,将需要运行的函数放在第二位

1
2
3
4
5
6
7
8
var a = 2;
(function(def) {
def(window)
})(function def(global) {
var a = 3;
console.log(a);
console.log(global.a);
})

变量提升

只有声明本身会被提升,而赋值或其他运行逻辑会留在原地。如果提升改变了代码执行的顺序,会
造成非常严重的破坏。
函数声明和变量声明都会被提升。但是一个值得注意的细节是函数会首先被提升,然后才是变量。