var声明的变量。
console.log(v1); var v1 = 100; function foo() { console.log(v1); var v1 = 200; console.log(v1); } foo(); console.log(v1);
输出结果:
//undefined //undefined //200 //100
声明函数的两种方式:
function bar () {} //函数声明式 var foo = function () {} //函数字面量式,这个和变量提升的结果是一样的,函数只是一个具体的值
但是函数声明式的提升现象和变量提升略有不同,具体如下:
console.log(bar); function bar () { console.log(1); }
输出结果:
执行顺序相当于:
function bar () { console.log(1); } console.log(bar);
函数提升是整个代码块提升到它所在的作用域的最开始执行
函数提升要比变量提升的优先级要高一些,且不会被变量声明覆盖,但是会被变量赋值之后覆盖。
console.log(a); // f a() {console.log(10)} console.log(a()); // 10 var a = 3; function a() { console.log(10) } console.log(a) // 3 a = 6; console.log(a()); // 报错:a is not a function;
执行顺序相当于
var a = funtion () { console.log(10) } var a; console.log(a); // f a() {console.log(10)} console.log(a()); // 10 a = 3; console.log(a) // 3 a = 6; console.log(a()); // 报错:a() is not a function;
原文:https://www.cnblogs.com/xjy20170907/p/12618605.html