var a =25;functionabc(){alert(a);//undefinedvar a =10;}abc();// 如果变量和函数同名的话,函数优先
console.log(a);functiona(){
console.log('aaaaa');}var a =1;
console.log(a);
全局解析规则
函数内部解析规则
变量提升
变量提升
定义变量的时候,变量的声明会被提升到作用域的最上面,变量的赋值不会提升。
函数提升
JavaScript解析器首先会把当前作用域的函数声明提前到整个作用域的最前面
例题
// 1、-----------------------------------var num =10;fun();functionfun(){
console.log(num);var num =20;}//2、-----------------------------------var a =18;f1();functionf1(){var b =9;
console.log(a);
console.log(b);var a ='123';}// 3、-----------------------------------f1();
console.log(c);
console.log(b);
console.log(a);functionf1(){var a = b = c =9;
console.log(a);
console.log(b);
console.log(c);}
例题解析
预解析后顺序
// 1、-----------------------------------functionfun(){var num;
console.log(num);
num =20;}var num =10;fun();//2、-----------------------------------functionf1(){var b =9;var a
console.log(a);
console.log(b);
a ='124';}var a =18;f1();// 3、-----------------------------------functionf1(){var a=9;//b和c是隐式全局变量
b =9;
c =9;
console.log(a);
console.log(b);
console.log(c);}f1();
console.log(c);
console.log(b);
console.log(a);