作用域:负责收集并维护由所有声明的标识符(变量) 组成的一系列查询, 并实施一套非常严格的规则, 确定当前执行的代码 对这些标识符的访问权限。
js的变量和函数在编译阶段会被提升到当前作用域最前面编译,函数是一等公民,优先编译函数,js是按照script块编译的
1. 只有声明的变量会提升,初始化的不会,JavaScript 严格模式(strict mode)不允许使用未声明的变量。
例如
var a=1
根据变量提升规则 var a,会被优先提升到作用域的顶部,之后会按照顺序执行 直到a=1执行完毕
所以
function print(){
console.log(a)
var a=3
}
print()
print()执行结果为 //undefined
2. 函数提升比变量提升优先级高
例如
function t1(age) {
console.log(age);
var age = 27;
console.log(age);
function age() {}
console.log(age);
}
t1(3);
第一个console输出的是 //function age()
第二个console输出的是 //27
第三个console输出的是 //27