console.log(a);
var a = 1;// 输出 undefined
- 使用 var 来声明变量的时候,会提到当前作用域的顶端,而赋值操作在原处不变
- 变量提升不能跨script
console.log(a) // undifined
if(false){
var a = 1;
}
- 尽管 if 不通过,还是提升了
- 函数会优先于变量 先提升
函数声明与函数表达式的区别
// 不要这样做,会有函数声明提升
if(Boolean){
function fn () { alert('1') }
} else {
function fn () { alert('2') }
}
// 函数表达式 既能够创建匿名函数再赋值给变量,也可以作为其他函数的返回值
var a
if(Boolean){
a = function () { alert('1') }
} else {
a = function () { alert('2') }
}
注: arguments.callee 是指向当前正在执行函数的指针,可以利用它实现函数的递归调用。
- 暂存性死区(针对let和const)
当当前作用域与父级作用域都存在同一变量名的变量时,不能在访问父级的同名变量