声明的全局变量从上至下,上面打印不了下面的变量;
js预编译:即变量提升,var a = 0; 实际代码顺序是 var a; a = 0;
其中var a;在js的最上面;
a = 5; //全局变量,a = 5 下面的代码会获取a=5的值,并且可以打印;
function fn1(){ var a = 10; console.log(a); } //这里打印10,就近原则;
function fn2(){ b = 10; console.log(a); } //这里打印5,全局变量 a => fn2()函数可以使用;
fn2(); => 调用后下面写的内容可以访问函数中 b = 10;
函数调用:为什么能把写在最下方的函数,直接在js上面调用;
也是由于js预编译,函数提升在js上方;
【注】预编译中变量(var)在函数()function的上方;
【例子】
// 代码顺序
console.log(b);
var b = 2; // var b;变量提升
function b(){console.log(1)};// 函数提升
console.log(b);
b();
// js预编译,实际执行顺序;
var b;
function b(){conso.log(1)};
console.log(b); // f b() { console.log(1) }
b = 2;
console.log(b); // 2
b(); // b is not a function