console.log(a) //结果为:a is not defined 报错了b = 1;console.log(b) //结果为:1var c = 2;console.log(c) //结果为:2
复制代码
实际以上代码会编译为下面的,然后再从上向下执行
var b;var c;console.log(a);b = 1;console.log(b);var c = 2;console.log(c)
复制代码
2.函数的提升(函数声明式)
console.log(aa); //结果为 undefinedconsole.log(bb); // 这个将会报错 bb is not defined 变量的提升只会对var声明的变量进行提升,所以就未定义呗!bb = 10var aa = 100;function fn() { console.log(aa); //结果为 undefined var aa = 200; console.log(aa); //结果为 200}fn();console.log(aa) //结果为 100
复制代码
实际以上代码会编译为下面的,然后再从上向下执行
var aa;function fn() { var aa; console.log("函数内部的 "+aa); //第二结果 函数内部的 undefined aa = 200; console.log("函数内部的 "+aa) //第三个结果 函数内部的 200}console.log("变量 "+aa) //第一个结果 变量 undefinedconsole.log(bb)bb = 10aa =100fn()console.log("变量 "+aa) //第四个结果 变量 100
复制代码
当然上面的bb报错了执行不了,测试的时候得注释掉
3.函数的提升(函数字面量式)
fn1(); //报错了 fn1 is not a functionvar fn1=function (){ console.log(1)}
复制代码
实际以上代码会编译为下面的,然后再从上向下执行
var fn1;fn1(); //很明显fn1是一个未赋值的变量,并不能用调用函数的方式调用fn1 = function(){ console.log(1)}