js高级_104、变量提升与函数提升
1,变量声明提升
通过var定义的变量,在定义语句之前就可以被访问到。
变量的值:undefind
如:
console.log(b);//结果undefind
var b=1;
或者:
var a=3;
function fn(){
console.log(a);
var a=2;
}
fn();//结果a=2;
2,函数声明提升
通过function声明的函数,在声明之前就可以直接调用,如果是用var 接收的匿名函数则不能调用,因为var的声明提升的值为undefind
函数值:函数定义(对象本身)
函数内部作用域内也有变量声明提升,函数内部没有该变量才会去外部找。
fn2();
function fn2(){
console.log(5);
}
变量声明提升和函数声明提升是如何产生的?
执行上下文对象(window)创建的时候就会把这些全局变量添加到自己的属性里,所以就是执行上下文对象对全局变量的预处理所产生的变量和函数提升。先执行变量提升再执行函数提升。